€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ'/translations/zh_CN/dev-tools/kselftest”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/zh_TW/dev-tools/kselftest”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/it_IT/dev-tools/kselftest”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/ja_JP/dev-tools/kselftest”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/ko_KR/dev-tools/kselftest”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/pt_BR/dev-tools/kselftest”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/sp_SP/dev-tools/kselftest”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒLinux Kernel Selftests”h]”hŒLinux Kernel Selftests”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒA/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest.rst”h´KubhŒ paragraph”“”)�”}”(hŒûThe kernel contains a set of "self tests" under the tools/testing/selftests/ directory. These are intended to be small tests to exercise individual code paths in the kernel. Tests are intended to be run after building, installing and booting a kernel.”h]”hŒÿThe kernel contains a set of “self testsâ€� under the tools/testing/selftests/ directory. These are intended to be small tests to exercise individual code paths in the kernel. Tests are intended to be run after building, installing and booting a kernel.”…”�”}”(hhÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hXÐKselftest from mainline can be run on older stable kernels. Running tests from mainline offers the best coverage. Several test rings run mainline kselftest suite on stable releases. The reason is that when a new test gets added to test existing code to regression test a bug, we should be able to run that test on an older kernel. Hence, it is important to keep code that can still test an older kernel and make sure it skips the test gracefully on newer releases.”h]”hXÐKselftest from mainline can be run on older stable kernels. Running tests from mainline offers the best coverage. Several test rings run mainline kselftest suite on stable releases. The reason is that when a new test gets added to test existing code to regression test a bug, we should be able to run that test on an older kernel. Hence, it is important to keep code that can still test an older kernel and make sure it skips the test gracefully on newer releases.”…”�”}”(hhÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubhÌ)�”}”(hX®On some systems, hot-plug tests could hang forever waiting for cpu and memory to be ready to be offlined. A special hot-plug target is created to run the full range of hot-plug tests. In default mode, hot-plug tests run in safe mode with a limited scope. In limited mode, cpu-hotplug test is run on a single cpu as opposed to all hotplug capable cpus, and memory hotplug test is run on 2% of hotplug capable memory instead of 10%.”h]”hX®On some systems, hot-plug tests could hang forever waiting for cpu and memory to be ready to be offlined. A special hot-plug target is created to run the full range of hot-plug tests. In default mode, hot-plug tests run in safe mode with a limited scope. In limited mode, cpu-hotplug test is run on a single cpu as opposed to all hotplug capable cpus, and memory hotplug test is run on 2% of hotplug capable memory instead of 10%.”…”�”}”(hhéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hŒÄkselftest runs as a userspace process. Tests that can be written/run in userspace may wish to use the `Test Harness`_. Tests that need to be run in kernel space may wish to use a `Test Module`_.”h]”(hŒgkselftest runs as a userspace process. Tests that can be written/run in userspace may wish to use the ”…”�”}”(hh÷h²hh³Nh´NubhŒ reference”“”)�”}”(hŒ`Test Harness`_”h]”hŒ Test Harness”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ Test Harness”Œrefid”Œ test-harness”uh1hÿhh÷Œresolved”KubhŒ?. Tests that need to be run in kernel space may wish to use a ”…”�”}”(hh÷h²hh³Nh´Nubj)�”}”(hŒ`Test Module`_”h]”hŒ Test Module”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ Test Module”jŒ test-module”uh1hÿhh÷jKubhŒ.”…”�”}”(hh÷h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒDocumentation on the tests”h]”hŒDocumentation on the tests”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj3h²hh³hÊh´KubhÌ)�”}”(hŒ4For documentation on the kselftests themselves, see:”h]”hŒ4For documentation on the kselftests themselves, see:”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hj3h²hubhŒcompound”“”)�”}”(hhh]”hŒtoctree”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”hŒdev-tools/kselftest”Œentries”]”NŒdev-tools/testing-devices”†”aŒ includefiles”]”jeaŒmaxdepth”JÿÿÿÿŒcaption”NŒglob”‰Œhidden”‰Œ includehidden”‰Œnumbered”KŒ titlesonly”‰Œ rawentries”]”uh1jWh³hÊh´K"hjTubah}”(h]”h ]”Œtoctree-wrapper”ah"]”h$]”h&]”uh1jRhj3h²hh³hÊh´K%ubeh}”(h]”Œdocumentation-on-the-tests”ah ]”h"]”Œdocumentation on the tests”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ=Running the selftests (hotplug tests are run in limited mode)”h]”hŒ=Running the selftests (hotplug tests are run in limited mode)”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj�h²hh³hÊh´K'ubhÌ)�”}”(hŒTo build the tests::”h]”hŒTo build the tests:”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K)hj�h²hubhŒ literal_block”“”)�”}”(hŒ0$ make headers $ make -C tools/testing/selftests”h]”hŒ0$ make headers $ make -C tools/testing/selftests”…”�”}”hj¢sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1j h³hÊh´K+hj�h²hubhÌ)�”}”(hŒTo run the tests::”h]”hŒTo run the tests:”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K.hj�h²hubj¡)�”}”(hŒ+$ make -C tools/testing/selftests run_tests”h]”hŒ+$ make -C tools/testing/selftests run_tests”…”�”}”hjÀsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´K0hj�h²hubhÌ)�”}”(hŒ7To build and run the tests with a single command, use::”h]”hŒ6To build and run the tests with a single command, use:”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K2hj�h²hubj¡)�”}”(hŒ$ make kselftest”h]”hŒ$ make kselftest”…”�”}”hjÜsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´K4hj�h²hubhÌ)�”}”(hŒ2Note that some tests will require root privileges.”h]”hŒ2Note that some tests will require root privileges.”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K6hj�h²hubhÌ)�”}”(hX.Kselftest supports saving output files in a separate directory and then running tests. To locate output files in a separate directory two syntaxes are supported. In both cases the working directory must be the root of the kernel src. This is applicable to "Running a subset of selftests" section below.”h]”hX2Kselftest supports saving output files in a separate directory and then running tests. To locate output files in a separate directory two syntaxes are supported. In both cases the working directory must be the root of the kernel src. This is applicable to “Running a subset of selftestsâ€� section below.”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K8hj�h²hubhÌ)�”}”(hŒ>To build, save output files in a separate directory with O= ::”h]”hŒ;To build, save output files in a separate directory with O=”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K>hj�h²hubj¡)�”}”(hŒ!$ make O=/tmp/kselftest kselftest”h]”hŒ!$ make O=/tmp/kselftest kselftest”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´K@hj�h²hubhÌ)�”}”(hŒITo build, save output files in a separate directory with KBUILD_OUTPUT ::”h]”hŒFTo build, save output files in a separate directory with KBUILD_OUTPUT”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KBhj�h²hubj¡)�”}”(hŒ5$ export KBUILD_OUTPUT=/tmp/kselftest; make kselftest”h]”hŒ5$ export KBUILD_OUTPUT=/tmp/kselftest; make kselftest”…”�”}”hj0sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´KDhj�h²hubhÌ)�”}”(hŒOThe O= assignment takes precedence over the KBUILD_OUTPUT environment variable.”h]”hŒOThe O= assignment takes precedence over the KBUILD_OUTPUT environment variable.”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KFhj�h²hubhÌ)�”}”(hXaThe above commands by default run the tests and print full pass/fail report. Kselftest supports "summary" option to make it easier to understand the test results. Please find the detailed individual test results for each test in /tmp/testname file(s) when summary option is specified. This is applicable to "Running a subset of selftests" section below.”h]”hXiThe above commands by default run the tests and print full pass/fail report. Kselftest supports “summaryâ€� option to make it easier to understand the test results. Please find the detailed individual test results for each test in /tmp/testname file(s) when summary option is specified. This is applicable to “Running a subset of selftestsâ€� section below.”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KIhj�h²hubhÌ)�”}”(hŒ/To run kselftest with summary option enabled ::”h]”hŒ,To run kselftest with summary option enabled”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KOhj�h²hubj¡)�”}”(hŒ$ make summary=1 kselftest”h]”hŒ$ make summary=1 kselftest”…”�”}”hjhsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´KQhj�h²hubeh}”(h]”Œ;running-the-selftests-hotplug-tests-are-run-in-limited-mode”ah ]”h"]”Œ=running the selftests (hotplug tests are run in limited mode)”ah$]”h&]”uh1hµhh·h²hh³hÊh´K'ubh¶)�”}”(hhh]”(h»)�”}”(hŒRunning a subset of selftests”h]”hŒRunning a subset of selftests”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj~h²hh³hÊh´KTubhÌ)�”}”(hŒuYou can use the "TARGETS" variable on the make command line to specify single test to run, or a list of tests to run.”h]”hŒyYou can use the “TARGETSâ€� variable on the make command line to specify single test to run, or a list of tests to run.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KVhj~h²hubhÌ)�”}”(hŒ3To run only tests targeted for a single subsystem::”h]”hŒ2To run only tests targeted for a single subsystem:”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KYhj~h²hubj¡)�”}”(hŒ:$ make -C tools/testing/selftests TARGETS=ptrace run_tests”h]”hŒ:$ make -C tools/testing/selftests TARGETS=ptrace run_tests”…”�”}”hj«sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´K[hj~h²hubhÌ)�”}”(hŒ1You can specify multiple tests to build and run::”h]”hŒ0You can specify multiple tests to build and run:”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K]hj~h²hubj¡)�”}”(hŒ'$ make TARGETS="size timers" kselftest”h]”hŒ'$ make TARGETS="size timers" kselftest”…”�”}”hjÇsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´K_hj~h²hubhÌ)�”}”(hŒ>To build, save output files in a separate directory with O= ::”h]”hŒ;To build, save output files in a separate directory with O=”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kahj~h²hubj¡)�”}”(hŒ7$ make O=/tmp/kselftest TARGETS="size timers" kselftest”h]”hŒ7$ make O=/tmp/kselftest TARGETS="size timers" kselftest”…”�”}”hjãsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´Kchj~h²hubhÌ)�”}”(hŒITo build, save output files in a separate directory with KBUILD_OUTPUT ::”h]”hŒFTo build, save output files in a separate directory with KBUILD_OUTPUT”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kehj~h²hubj¡)�”}”(hŒK$ export KBUILD_OUTPUT=/tmp/kselftest; make TARGETS="size timers" kselftest”h]”hŒK$ export KBUILD_OUTPUT=/tmp/kselftest; make TARGETS="size timers" kselftest”…”�”}”hjÿsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´Kghj~h²hubhÌ)�”}”(hŒŽAdditionally you can use the "SKIP_TARGETS" variable on the make command line to specify one or more targets to exclude from the TARGETS list.”h]”hŒ’Additionally you can use the “SKIP_TARGETSâ€� variable on the make command line to specify one or more targets to exclude from the TARGETS list.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kihj~h²hubhÌ)�”}”(hŒ)To run all tests but a single subsystem::”h]”hŒ(To run all tests but a single subsystem:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Klhj~h²hubj¡)�”}”(hŒ?$ make -C tools/testing/selftests SKIP_TARGETS=ptrace run_tests”h]”hŒ?$ make -C tools/testing/selftests SKIP_TARGETS=ptrace run_tests”…”�”}”hj)sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´Knhj~h²hubhÌ)�”}”(hŒ(You can specify multiple tests to skip::”h]”hŒ'You can specify multiple tests to skip:”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kphj~h²hubj¡)�”}”(hŒ,$ make SKIP_TARGETS="size timers" kselftest”h]”hŒ,$ make SKIP_TARGETS="size timers" kselftest”…”�”}”hjEsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´Krhj~h²hubhÌ)�”}”(hŒ[You can also specify a restricted list of tests to run together with a dedicated skiplist::”h]”hŒZYou can also specify a restricted list of tests to run together with a dedicated skiplist:”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kthj~h²hubj¡)�”}”(hŒE$ make TARGETS="breakpoints size timers" SKIP_TARGETS=size kselftest”h]”hŒE$ make TARGETS="breakpoints size timers" SKIP_TARGETS=size kselftest”…”�”}”hjasbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´Kwhj~h²hubhÌ)�”}”(hŒXSee the top-level tools/testing/selftests/Makefile for the list of all possible targets.”h]”hŒXSee the top-level tools/testing/selftests/Makefile for the list of all possible targets.”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kyhj~h²hubeh}”(h]”Œrunning-a-subset-of-selftests”ah ]”h"]”Œrunning a subset of selftests”ah$]”h&]”uh1hµhh·h²hh³hÊh´KTŒ referenced”Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ+Requiring all targets to build successfully”h]”hŒ+Requiring all targets to build successfully”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj†h²hh³hÊh´K}ubhÌ)�”}”(hŒÐBy default, the build succeeds as long as at least one target builds without error. Set ``FORCE_TARGETS=1`` to instead require every target to build successfully; make will abort as soon as any target fails::”h]”(hŒXBy default, the build succeeds as long as at least one target builds without error. Set ”…”�”}”(hj—h²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``FORCE_TARGETS=1``”h]”hŒFORCE_TARGETS=1”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj—ubhŒd to instead require every target to build successfully; make will abort as soon as any target fails:”…”�”}”(hj—h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj†h²hubj¡)�”}”(hŒ1$ make -C tools/testing/selftests FORCE_TARGETS=1”h]”hŒ1$ make -C tools/testing/selftests FORCE_TARGETS=1”…”�”}”hj¹sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´Kƒhj†h²hubhÌ)�”}”(hŒ‹This applies to both the ``all`` and ``install`` targets and is useful in CI environments where a silent partial build would be misleading.”h]”(hŒThis applies to both the ”…”�”}”(hjÇh²hh³Nh´Nubj )�”}”(hŒ``all``”h]”hŒall”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÇubhŒ and ”…”�”}”(hjÇh²hh³Nh´Nubj )�”}”(hŒ ``install``”h]”hŒinstall”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÇubhŒ[ targets and is useful in CI environments where a silent partial build would be misleading.”…”�”}”(hjÇh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K…hj†h²hubeh}”(h]”Œ+requiring-all-targets-to-build-successfully”ah ]”h"]”Œ+requiring all targets to build successfully”ah$]”h&]”uh1hµhh·h²hh³hÊh´K}ubh¶)�”}”(hhh]”(h»)�”}”(hŒ(Running the full range hotplug selftests”h]”hŒ(Running the full range hotplug selftests”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´K‰ubhÌ)�”}”(hŒTo build the hotplug tests::”h]”hŒTo build the hotplug tests:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‹hjh²hubj¡)�”}”(hŒ)$ make -C tools/testing/selftests hotplug”h]”hŒ)$ make -C tools/testing/selftests hotplug”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´K�hjh²hubhÌ)�”}”(hŒTo run the hotplug tests::”h]”hŒTo run the hotplug tests:”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K�hjh²hubj¡)�”}”(hŒ-$ make -C tools/testing/selftests run_hotplug”h]”hŒ-$ make -C tools/testing/selftests run_hotplug”…”�”}”hj<sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´K‘hjh²hubhÌ)�”}”(hŒ2Note that some tests will require root privileges.”h]”hŒ2Note that some tests will require root privileges.”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K“hjh²hubeh}”(h]”Œ(running-the-full-range-hotplug-selftests”ah ]”h"]”Œ(running the full range hotplug selftests”ah$]”h&]”uh1hµhh·h²hh³hÊh´K‰ubh¶)�”}”(hhh]”(h»)�”}”(hŒInstall selftests”h]”hŒInstall selftests”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj`h²hh³hÊh´K—ubhÌ)�”}”(hŒüYou can use the "install" target of "make" (which calls the `kselftest_install.sh` tool) to install selftests in the default location (`tools/testing/selftests/kselftest_install`), or in a user specified location via the `INSTALL_PATH` "make" variable.”h]”(hŒDYou can use the “installâ€� target of “makeâ€� (which calls the ”…”�”}”(hjqh²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ`kselftest_install.sh`”h]”hŒkselftest_install.sh”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjqubhŒ5 tool) to install selftests in the default location (”…”�”}”(hjqh²hh³Nh´Nubjz)�”}”(hŒ+`tools/testing/selftests/kselftest_install`”h]”hŒ)tools/testing/selftests/kselftest_install”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjqubhŒ+), or in a user specified location via the ”…”�”}”(hjqh²hh³Nh´Nubjz)�”}”(hŒ`INSTALL_PATH`”h]”hŒ INSTALL_PATH”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjqubhŒ “makeâ€� variable.”…”�”}”(hjqh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K™hj`h²hubhÌ)�”}”(hŒ*To install selftests in default location::”h]”hŒ)To install selftests in default location:”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K�hj`h²hubj¡)�”}”(hŒ)$ make -C tools/testing/selftests install”h]”hŒ)$ make -C tools/testing/selftests install”…”�”}”hjÅsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´KŸhj`h²hubhÌ)�”}”(hŒ3To install selftests in a user specified location::”h]”hŒ2To install selftests in a user specified location:”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¡hj`h²hubj¡)�”}”(hŒG$ make -C tools/testing/selftests install INSTALL_PATH=/some/other/path”h]”hŒG$ make -C tools/testing/selftests install INSTALL_PATH=/some/other/path”…”�”}”hjásbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´K£hj`h²hubeh}”(h]”Œinstall-selftests”ah ]”h"]”Œinstall selftests”ah$]”h&]”uh1hµhh·h²hh³hÊh´K—ubh¶)�”}”(hhh]”(h»)�”}”(hŒRunning installed selftests”h]”hŒRunning installed selftests”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj÷h²hh³hÊh´K¦ubhÌ)�”}”(hŒ{Found in the install directory, as well as in the Kselftest tarball, is a script named `run_kselftest.sh` to run the tests.”h]”(hŒWFound in the install directory, as well as in the Kselftest tarball, is a script named ”…”�”}”(hjh²hh³Nh´Nubjz)�”}”(hŒ`run_kselftest.sh`”h]”hŒrun_kselftest.sh”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjubhŒ to run the tests.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¨hj÷h²hubhÌ)�”}”(hŒvYou can simply do the following to run the installed Kselftests. Please note some tests will require root privileges::”h]”hŒuYou can simply do the following to run the installed Kselftests. Please note some tests will require root privileges:”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K«hj÷h²hubj¡)�”}”(hŒ+$ cd kselftest_install $ ./run_kselftest.sh”h]”hŒ+$ cd kselftest_install $ ./run_kselftest.sh”…”�”}”hj6sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´K®hj÷h²hubhÌ)�”}”(hŒATo see the list of available tests, the `-l` option can be used::”h]”(hŒ(To see the list of available tests, the ”…”�”}”(hjDh²hh³Nh´Nubjz)�”}”(hŒ`-l`”h]”hŒ-l”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjDubhŒ option can be used:”…”�”}”(hjDh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K±hj÷h²hubj¡)�”}”(hŒ$ ./run_kselftest.sh -l”h]”hŒ$ ./run_kselftest.sh -l”…”�”}”hjdsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´K³hj÷h²hubhÌ)�”}”(hŒšThe `-c` option can be used to run all the tests from a test collection, or the `-t` option for specific single tests. Either can be used multiple times::”h]”(hŒThe ”…”�”}”(hjrh²hh³Nh´Nubjz)�”}”(hŒ`-c`”h]”hŒ-c”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjrubhŒH option can be used to run all the tests from a test collection, or the ”…”�”}”(hjrh²hh³Nh´Nubjz)�”}”(hŒ`-t`”h]”hŒ-t”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjrubhŒE option for specific single tests. Either can be used multiple times:”…”�”}”(hjrh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kµhj÷h²hubj¡)�”}”(hŒQ$ ./run_kselftest.sh -c size -c seccomp -t timers:posix_timers -t timer:nanosleep”h]”hŒQ$ ./run_kselftest.sh -c size -c seccomp -t timers:posix_timers -t timer:nanosleep”…”�”}”hj¤sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´K¸hj÷h²hubhÌ)�”}”(hŒJFor other features see the script usage output, seen with the `-h` option.”h]”(hŒ>For other features see the script usage output, seen with the ”…”�”}”(hj²h²hh³Nh´Nubjz)�”}”(hŒ`-h`”h]”hŒ-h”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj²ubhŒ option.”…”�”}”(hj²h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kºhj÷h²hubeh}”(h]”Œrunning-installed-selftests”ah ]”h"]”Œrunning installed selftests”ah$]”h&]”uh1hµhh·h²hh³hÊh´K¦ubh¶)�”}”(hhh]”(h»)�”}”(hŒTimeout for selftests”h]”hŒTimeout for selftests”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÚh²hh³hÊh´K½ubhÌ)�”}”(hX:Selftests are designed to be quick and so a default timeout is used of 45 seconds for each test. Tests can override the default timeout by adding a settings file in their directory and set a timeout variable there to the configured a desired upper timeout for the test. Only a few tests override the timeout with a value higher than 45 seconds, selftests strives to keep it that way. Timeouts in selftests are not considered fatal because the system under which a test runs may change and this can also modify the expected time it takes to run a test. If you have control over the systems which will run the tests you can configure a test runner on those systems to use a greater or lower timeout on the command line as with the `-o` or the `--override-timeout` argument. For example to use 165 seconds instead one would use::”h]”(hXÙSelftests are designed to be quick and so a default timeout is used of 45 seconds for each test. Tests can override the default timeout by adding a settings file in their directory and set a timeout variable there to the configured a desired upper timeout for the test. Only a few tests override the timeout with a value higher than 45 seconds, selftests strives to keep it that way. Timeouts in selftests are not considered fatal because the system under which a test runs may change and this can also modify the expected time it takes to run a test. If you have control over the systems which will run the tests you can configure a test runner on those systems to use a greater or lower timeout on the command line as with the ”…”�”}”(hjëh²hh³Nh´Nubjz)�”}”(hŒ`-o`”h]”hŒ-o”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjëubhŒ or the ”…”�”}”(hjëh²hh³Nh´Nubjz)�”}”(hŒ`--override-timeout`”h]”hŒ--override-timeout”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjëubhŒ@ argument. For example to use 165 seconds instead one would use:”…”�”}”(hjëh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¿hjÚh²hubj¡)�”}”(hŒ+$ ./run_kselftest.sh --override-timeout 165”h]”hŒ+$ ./run_kselftest.sh --override-timeout 165”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´KÌhjÚh²hubhÌ)�”}”(hŒ¸You can look at the TAP output to see if you ran into the timeout. Test runners which know a test must run under a specific time can then optionally treat these timeouts then as fatal.”h]”hŒ¸You can look at the TAP output to see if you ran into the timeout. Test runners which know a test must run under a specific time can then optionally treat these timeouts then as fatal.”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÎhjÚh²hubeh}”(h]”Œtimeout-for-selftests”ah ]”h"]”Œtimeout for selftests”ah$]”h&]”uh1hµhh·h²hh³hÊh´K½ubh¶)�”}”(hhh]”(h»)�”}”(hŒPackaging selftests”h]”hŒPackaging selftests”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjAh²hh³hÊh´KÓubhÌ)�”}”(hŒuIn some cases packaging is desired, such as when tests need to run on a different system. To package selftests, run::”h]”hŒtIn some cases packaging is desired, such as when tests need to run on a different system. To package selftests, run:”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÕhjAh²hubj¡)�”}”(hŒ)$ make -C tools/testing/selftests gen_tar”h]”hŒ)$ make -C tools/testing/selftests gen_tar”…”�”}”hj`sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´KØhjAh²hubhÌ)�”}”(hXThis generates a tarball in the `INSTALL_PATH/kselftest-packages` directory. By default, `.gz` format is used. The tar compression format can be overridden by specifying a `FORMAT` make variable. Any value recognized by `tar's auto-compress`_ option is supported, such as::”h]”(hŒ This generates a tarball in the ”…”�”}”(hjnh²hh³Nh´Nubjz)�”}”(hŒ!`INSTALL_PATH/kselftest-packages`”h]”hŒINSTALL_PATH/kselftest-packages”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjnubhŒ directory. By default, ”…”�”}”(hjnh²hh³Nh´Nubjz)�”}”(hŒ`.gz`”h]”hŒ.gz”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjnubhŒN format is used. The tar compression format can be overridden by specifying a ”…”�”}”(hjnh²hh³Nh´Nubjz)�”}”(hŒ`FORMAT`”h]”hŒFORMAT”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjnubhŒ( make variable. Any value recognized by ”…”�”}”(hjnh²hh³Nh´Nubj)�”}”(hŒ`tar's auto-compress`_”h]”hŒtar’s auto-compress”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œtar's auto-compress”Œrefuri”ŒMhttps://www.gnu.org/software/tar/manual/html_node/gzip.html#auto_002dcompress”uh1hÿhjnjKubhŒ option is supported, such as:”…”�”}”(hjnh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÚhjAh²hubj¡)�”}”(hŒ4$ make -C tools/testing/selftests gen_tar FORMAT=.xz”h]”hŒ4$ make -C tools/testing/selftests gen_tar FORMAT=.xz”…”�”}”hjÈsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´KßhjAh²hubhÌ)�”}”(hŒŸ`make gen_tar` invokes `make install` so you can use it to package a subset of tests by using variables specified in `Running a subset of selftests`_ section::”h]”(jz)�”}”(hŒ`make gen_tar`”h]”hŒ make gen_tar”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjÖubhŒ invokes ”…”�”}”(hjÖh²hh³Nh´Nubjz)�”}”(hŒ`make install`”h]”hŒ make install”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjÖubhŒP so you can use it to package a subset of tests by using variables specified in ”…”�”}”(hjÖh²hh³Nh´Nubj)�”}”(hŒ `Running a subset of selftests`_”h]”hŒRunning a subset of selftests”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒRunning a subset of selftests”jjuh1hÿhjÖjKubhŒ section:”…”�”}”(hjÖh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KáhjAh²hubj¡)�”}”(hŒC$ make -C tools/testing/selftests gen_tar TARGETS="size" FORMAT=.xz”h]”hŒC$ make -C tools/testing/selftests gen_tar TARGETS="size" FORMAT=.xz”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´KåhjAh²hubhŒtarget”“”)�”}”(hŒf.. _tar's auto-compress: https://www.gnu.org/software/tar/manual/html_node/gzip.html#auto_002dcompress”h]”h}”(h]”Œtar-s-auto-compress”ah ]”h"]”Œtar's auto-compress”ah$]”h&]”j¼j½uh1j&h´KçhjAh²hh³hÊj…Kubeh}”(h]”Œpackaging-selftests”ah ]”h"]”Œpackaging selftests”ah$]”h&]”uh1hµhh·h²hh³hÊh´KÓubh¶)�”}”(hhh]”(h»)�”}”(hŒContributing new tests”h]”hŒContributing new tests”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj<h²hh³hÊh´KêubhÌ)�”}”(hŒ'In general, the rules for selftests are”h]”hŒ'In general, the rules for selftests are”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kìhj<h²hubhŒ block_quote”“”)�”}”(hXS* Do as much as you can if you're not root; * Don't take too long; * Don't break the build on any architecture, and * Don't cause the top-level "make run_tests" to fail if your feature is unconfigured. * The output of tests must conform to the TAP standard to ensure high testing quality and to capture failures/errors with specific details. The kselftest.h and kselftest_harness.h headers provide wrappers for outputting test results. These wrappers should be used for pass, fail, exit, and skip messages. CI systems can easily parse TAP output messages to detect test results. ”h]”hŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ*Do as much as you can if you're not root; ”h]”hÌ)�”}”(hŒ)Do as much as you can if you're not root;”h]”hŒ+Do as much as you can if you’re not root;”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kîhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjcubjg)�”}”(hŒDon't take too long; ”h]”hÌ)�”}”(hŒDon't take too long;”h]”hŒDon’t take too long;”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kðhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjcubjg)�”}”(hŒ/Don't break the build on any architecture, and ”h]”hÌ)�”}”(hŒ.Don't break the build on any architecture, and”h]”hŒ0Don’t break the build on any architecture, and”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kòhj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjcubjg)�”}”(hŒTDon't cause the top-level "make run_tests" to fail if your feature is unconfigured. ”h]”hÌ)�”}”(hŒSDon't cause the top-level "make run_tests" to fail if your feature is unconfigured.”h]”hŒYDon’t cause the top-level “make run_testsâ€� to fail if your feature is unconfigured.”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kôhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjcubjg)�”}”(hXwThe output of tests must conform to the TAP standard to ensure high testing quality and to capture failures/errors with specific details. The kselftest.h and kselftest_harness.h headers provide wrappers for outputting test results. These wrappers should be used for pass, fail, exit, and skip messages. CI systems can easily parse TAP output messages to detect test results. ”h]”hÌ)�”}”(hXvThe output of tests must conform to the TAP standard to ensure high testing quality and to capture failures/errors with specific details. The kselftest.h and kselftest_harness.h headers provide wrappers for outputting test results. These wrappers should be used for pass, fail, exit, and skip messages. CI systems can easily parse TAP output messages to detect test results.”h]”hXvThe output of tests must conform to the TAP standard to ensure high testing quality and to capture failures/errors with specific details. The kselftest.h and kselftest_harness.h headers provide wrappers for outputting test results. These wrappers should be used for pass, fail, exit, and skip messages. CI systems can easily parse TAP output messages to detect test results.”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K÷hjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjcubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1jah³hÊh´Kîhj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³hÊh´Kîhj<h²hubeh}”(h]”Œcontributing-new-tests”ah ]”h"]”Œcontributing new tests”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kêubh¶)�”}”(hhh]”(h»)�”}”(hŒ Contributing new tests (details)”h]”hŒ Contributing new tests (details)”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjöh²hh³hÊh´Kÿubj\)�”}”(hX9 * In your Makefile, use facilities from lib.mk by including it instead of reinventing the wheel. Specify flags and binaries generation flags on need basis before including lib.mk. :: CFLAGS = $(KHDR_INCLUDES) TEST_GEN_PROGS := close_range_test include ../lib.mk * Use TEST_GEN_XXX if such binaries or files are generated during compiling. TEST_PROGS, TEST_GEN_PROGS mean it is the executable tested by default. TEST_GEN_MODS_DIR should be used by tests that require modules to be built before the test starts. The variable will contain the name of the directory containing the modules. TEST_CUSTOM_PROGS should be used by tests that require custom build rules and prevent common build rule use. TEST_PROGS are for test shell scripts. Please ensure shell script has its exec bit set. Otherwise, lib.mk run_tests will generate a warning. TEST_CUSTOM_PROGS and TEST_PROGS will be run by common run_tests. TEST_PROGS_EXTENDED, TEST_GEN_PROGS_EXTENDED mean it is the executable which is not tested by default. TEST_FILES, TEST_GEN_FILES mean it is the file which is used by test. TEST_INCLUDES is similar to TEST_FILES, it lists files which should be included when exporting or installing the tests, with the following differences: * symlinks to files in other directories are preserved * the part of paths below tools/testing/selftests/ is preserved when copying the files to the output directory TEST_INCLUDES is meant to list dependencies located in other directories of the selftests hierarchy. * First use the headers inside the kernel source and/or git repo, and then the system headers. Headers for the kernel release as opposed to headers installed by the distro on the system should be the primary focus to be able to find regressions. Use KHDR_INCLUDES in Makefile to include headers from the kernel source. * If a test needs specific kernel config options enabled, add a config file in the test directory to enable them. e.g: tools/testing/selftests/android/config * Create a .gitignore file inside test directory and add all generated objects in it. * Add new test name in TARGETS in selftests/Makefile:: TARGETS += android * All changes should pass:: kselftest-{all,install,clean,gen_tar} kselftest-{all,install,clean,gen_tar} O=abo_path kselftest-{all,install,clean,gen_tar} O=rel_path make -C tools/testing/selftests {all,install,clean,gen_tar} make -C tools/testing/selftests {all,install,clean,gen_tar} O=abs_path make -C tools/testing/selftests {all,install,clean,gen_tar} O=rel_path ”h]”jb)�”}”(hhh]”(jg)�”}”(hXIn your Makefile, use facilities from lib.mk by including it instead of reinventing the wheel. Specify flags and binaries generation flags on need basis before including lib.mk. :: CFLAGS = $(KHDR_INCLUDES) TEST_GEN_PROGS := close_range_test include ../lib.mk ”h]”(hÌ)�”}”(hŒ´In your Makefile, use facilities from lib.mk by including it instead of reinventing the wheel. Specify flags and binaries generation flags on need basis before including lib.mk. ::”h]”hŒ±In your Makefile, use facilities from lib.mk by including it instead of reinventing the wheel. Specify flags and binaries generation flags on need basis before including lib.mk.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjubj¡)�”}”(hŒNCFLAGS = $(KHDR_INCLUDES) TEST_GEN_PROGS := close_range_test include ../lib.mk”h]”hŒNCFLAGS = $(KHDR_INCLUDES) TEST_GEN_PROGS := close_range_test include ../lib.mk”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´Mhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj ubjg)�”}”(hXÝUse TEST_GEN_XXX if such binaries or files are generated during compiling. TEST_PROGS, TEST_GEN_PROGS mean it is the executable tested by default. TEST_GEN_MODS_DIR should be used by tests that require modules to be built before the test starts. The variable will contain the name of the directory containing the modules. TEST_CUSTOM_PROGS should be used by tests that require custom build rules and prevent common build rule use. TEST_PROGS are for test shell scripts. Please ensure shell script has its exec bit set. Otherwise, lib.mk run_tests will generate a warning. TEST_CUSTOM_PROGS and TEST_PROGS will be run by common run_tests. TEST_PROGS_EXTENDED, TEST_GEN_PROGS_EXTENDED mean it is the executable which is not tested by default. TEST_FILES, TEST_GEN_FILES mean it is the file which is used by test. TEST_INCLUDES is similar to TEST_FILES, it lists files which should be included when exporting or installing the tests, with the following differences: * symlinks to files in other directories are preserved * the part of paths below tools/testing/selftests/ is preserved when copying the files to the output directory TEST_INCLUDES is meant to list dependencies located in other directories of the selftests hierarchy. ”h]”(hÌ)�”}”(hŒJUse TEST_GEN_XXX if such binaries or files are generated during compiling.”h]”hŒJUse TEST_GEN_XXX if such binaries or files are generated during compiling.”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hj4ubhÌ)�”}”(hŒGTEST_PROGS, TEST_GEN_PROGS mean it is the executable tested by default.”h]”hŒGTEST_PROGS, TEST_GEN_PROGS mean it is the executable tested by default.”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hj4ubhÌ)�”}”(hŒ®TEST_GEN_MODS_DIR should be used by tests that require modules to be built before the test starts. The variable will contain the name of the directory containing the modules.”h]”hŒ®TEST_GEN_MODS_DIR should be used by tests that require modules to be built before the test starts. The variable will contain the name of the directory containing the modules.”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj4ubhÌ)�”}”(hŒlTEST_CUSTOM_PROGS should be used by tests that require custom build rules and prevent common build rule use.”h]”hŒlTEST_CUSTOM_PROGS should be used by tests that require custom build rules and prevent common build rule use.”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj4ubhÌ)�”}”(hŒŒTEST_PROGS are for test shell scripts. Please ensure shell script has its exec bit set. Otherwise, lib.mk run_tests will generate a warning.”h]”hŒŒTEST_PROGS are for test shell scripts. Please ensure shell script has its exec bit set. Otherwise, lib.mk run_tests will generate a warning.”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj4ubhÌ)�”}”(hŒATEST_CUSTOM_PROGS and TEST_PROGS will be run by common run_tests.”h]”hŒATEST_CUSTOM_PROGS and TEST_PROGS will be run by common run_tests.”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj4ubhÌ)�”}”(hŒfTEST_PROGS_EXTENDED, TEST_GEN_PROGS_EXTENDED mean it is the executable which is not tested by default.”h]”hŒfTEST_PROGS_EXTENDED, TEST_GEN_PROGS_EXTENDED mean it is the executable which is not tested by default.”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj4ubhÌ)�”}”(hŒETEST_FILES, TEST_GEN_FILES mean it is the file which is used by test.”h]”hŒETEST_FILES, TEST_GEN_FILES mean it is the file which is used by test.”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj4ubhÌ)�”}”(hŒ—TEST_INCLUDES is similar to TEST_FILES, it lists files which should be included when exporting or installing the tests, with the following differences:”h]”hŒ—TEST_INCLUDES is similar to TEST_FILES, it lists files which should be included when exporting or installing the tests, with the following differences:”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M!hj4ubj\)�”}”(hŒ¨* symlinks to files in other directories are preserved * the part of paths below tools/testing/selftests/ is preserved when copying the files to the output directory ”h]”jb)�”}”(hhh]”(jg)�”}”(hŒ4symlinks to files in other directories are preserved”h]”hÌ)�”}”(hj¿h]”hŒ4symlinks to files in other directories are preserved”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M%hj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjºubjg)�”}”(hŒmthe part of paths below tools/testing/selftests/ is preserved when copying the files to the output directory ”h]”hÌ)�”}”(hŒlthe part of paths below tools/testing/selftests/ is preserved when copying the files to the output directory”h]”hŒlthe part of paths below tools/testing/selftests/ is preserved when copying the files to the output directory”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M&hjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjºubeh}”(h]”h ]”h"]”h$]”h&]”jæjçuh1jah³hÊh´M%hj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³hÊh´M%hj4ubhÌ)�”}”(hŒdTEST_INCLUDES is meant to list dependencies located in other directories of the selftests hierarchy.”h]”hŒdTEST_INCLUDES is meant to list dependencies located in other directories of the selftests hierarchy.”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M)hj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj ubjg)�”}”(hX>First use the headers inside the kernel source and/or git repo, and then the system headers. Headers for the kernel release as opposed to headers installed by the distro on the system should be the primary focus to be able to find regressions. Use KHDR_INCLUDES in Makefile to include headers from the kernel source. ”h]”hÌ)�”}”(hX=First use the headers inside the kernel source and/or git repo, and then the system headers. Headers for the kernel release as opposed to headers installed by the distro on the system should be the primary focus to be able to find regressions. Use KHDR_INCLUDES in Makefile to include headers from the kernel source.”h]”hX=First use the headers inside the kernel source and/or git repo, and then the system headers. Headers for the kernel release as opposed to headers installed by the distro on the system should be the primary focus to be able to find regressions. Use KHDR_INCLUDES in Makefile to include headers from the kernel source.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M,hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj ubjg)�”}”(hŒ�If a test needs specific kernel config options enabled, add a config file in the test directory to enable them. e.g: tools/testing/selftests/android/config ”h]”(hÌ)�”}”(hŒoIf a test needs specific kernel config options enabled, add a config file in the test directory to enable them.”h]”hŒoIf a test needs specific kernel config options enabled, add a config file in the test directory to enable them.”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M2hj$ ubhÌ)�”}”(hŒ+e.g: tools/testing/selftests/android/config”h]”hŒ+e.g: tools/testing/selftests/android/config”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M5hj$ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj ubjg)�”}”(hŒTCreate a .gitignore file inside test directory and add all generated objects in it. ”h]”hÌ)�”}”(hŒSCreate a .gitignore file inside test directory and add all generated objects in it.”h]”hŒSCreate a .gitignore file inside test directory and add all generated objects in it.”…”�”}”(hjN h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M7hjJ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj ubjg)�”}”(hŒJAdd new test name in TARGETS in selftests/Makefile:: TARGETS += android ”h]”(hÌ)�”}”(hŒ4Add new test name in TARGETS in selftests/Makefile::”h]”hŒ3Add new test name in TARGETS in selftests/Makefile:”…”�”}”(hjf h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M:hjb ubj¡)�”}”(hŒTARGETS += android”h]”hŒTARGETS += android”…”�”}”hjt sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´M<hjb ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj ubjg)�”}”(hXsAll changes should pass:: kselftest-{all,install,clean,gen_tar} kselftest-{all,install,clean,gen_tar} O=abo_path kselftest-{all,install,clean,gen_tar} O=rel_path make -C tools/testing/selftests {all,install,clean,gen_tar} make -C tools/testing/selftests {all,install,clean,gen_tar} O=abs_path make -C tools/testing/selftests {all,install,clean,gen_tar} O=rel_path ”h]”(hÌ)�”}”(hŒAll changes should pass::”h]”hŒAll changes should pass:”…”�”}”(hjŒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M>hjˆ ubj¡)�”}”(hXQkselftest-{all,install,clean,gen_tar} kselftest-{all,install,clean,gen_tar} O=abo_path kselftest-{all,install,clean,gen_tar} O=rel_path make -C tools/testing/selftests {all,install,clean,gen_tar} make -C tools/testing/selftests {all,install,clean,gen_tar} O=abs_path make -C tools/testing/selftests {all,install,clean,gen_tar} O=rel_path”h]”hXQkselftest-{all,install,clean,gen_tar} kselftest-{all,install,clean,gen_tar} O=abo_path kselftest-{all,install,clean,gen_tar} O=rel_path make -C tools/testing/selftests {all,install,clean,gen_tar} make -C tools/testing/selftests {all,install,clean,gen_tar} O=abs_path make -C tools/testing/selftests {all,install,clean,gen_tar} O=rel_path”…”�”}”hjš sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´M@hjˆ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj ubeh}”(h]”h ]”h"]”h$]”h&]”jæjçuh1jah³hÊh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³hÊh´Mhjöh²hubeh}”(h]”Œcontributing-new-tests-details”ah ]”h"]”Œ contributing new tests (details)”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kÿubh¶)�”}”(hhh]”(h»)�”}”(hŒ Test Module”h]”hŒ Test Module”…”�”}”(hjÅ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj h²hh³hÊh´MHubhÌ)�”}”(hX˜Kselftest tests the kernel from userspace. Sometimes things need testing from within the kernel, one method of doing this is to create a test module. We can tie the module into the kselftest framework by using a shell script test runner. ``kselftest/module.sh`` is designed to facilitate this process. There is also a header file provided to assist writing kernel modules that are for use with kselftest:”h]”(hŒñKselftest tests the kernel from userspace. Sometimes things need testing from within the kernel, one method of doing this is to create a test module. We can tie the module into the kselftest framework by using a shell script test runner. ”…”�”}”(hjÓ h²hh³Nh´Nubj )�”}”(hŒ``kselftest/module.sh``”h]”hŒkselftest/module.sh”…”�”}”(hjÛ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÓ ubhŒ� is designed to facilitate this process. There is also a header file provided to assist writing kernel modules that are for use with kselftest:”…”�”}”(hjÓ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MJhj h²hubjb)�”}”(hhh]”(jg)�”}”(hŒ.``tools/testing/selftests/kselftest_module.h``”h]”hÌ)�”}”(hjø h]”j )�”}”(hjø h]”hŒ*tools/testing/selftests/kselftest_module.h”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjú ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MQhjö ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjó h²hh³hÊh´Nubjg)�”}”(hŒ0``tools/testing/selftests/kselftest/module.sh`` ”h]”hÌ)�”}”(hŒ/``tools/testing/selftests/kselftest/module.sh``”h]”j )�”}”(hj h]”hŒ+tools/testing/selftests/kselftest/module.sh”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MRhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjó h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jæŒ-”uh1jah³hÊh´MQhj h²hubhÌ)�”}”(hXûNote that test modules should taint the kernel with TAINT_TEST. This will happen automatically for modules which are in the ``tools/testing/`` directory, or for modules which use the ``kselftest_module.h`` header above. Otherwise, you'll need to add ``MODULE_INFO(test, "Y")`` to your module source. selftests which do not load modules typically should not taint the kernel, but in cases where a non-test module is loaded, TEST_TAINT can be applied from userspace by writing to ``/proc/sys/kernel/tainted``.”h]”(hŒ|Note that test modules should taint the kernel with TAINT_TEST. This will happen automatically for modules which are in the ”…”�”}”(hj> h²hh³Nh´Nubj )�”}”(hŒ``tools/testing/``”h]”hŒtools/testing/”…”�”}”(hjF h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj> ubhŒ) directory, or for modules which use the ”…”�”}”(hj> h²hh³Nh´Nubj )�”}”(hŒ``kselftest_module.h``”h]”hŒkselftest_module.h”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj> ubhŒ/ header above. Otherwise, you’ll need to add ”…”�”}”(hj> h²hh³Nh´Nubj )�”}”(hŒ``MODULE_INFO(test, "Y")``”h]”hŒMODULE_INFO(test, "Y")”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj> ubhŒÊ to your module source. selftests which do not load modules typically should not taint the kernel, but in cases where a non-test module is loaded, TEST_TAINT can be applied from userspace by writing to ”…”�”}”(hj> h²hh³Nh´Nubj )�”}”(hŒ``/proc/sys/kernel/tainted``”h]”hŒ/proc/sys/kernel/tainted”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj> ubhŒ.”…”�”}”(hj> h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MThj h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ How to use”h]”hŒ How to use”…”�”}”(hj— h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj” h²hh³hÊh´M]ubhÌ)�”}”(hŒ|Here we show the typical steps to create a test module and tie it into kselftest. We use kselftests for lib/ as an example.”h]”hŒ|Here we show the typical steps to create a test module and tie it into kselftest. We use kselftests for lib/ as an example.”…”�”}”(hj¥ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M_hj” h²hubhŒenumerated_list”“”)�”}”(hhh]”(jg)�”}”(hŒCreate the test module ”h]”hÌ)�”}”(hŒCreate the test module”h]”hŒCreate the test module”…”�”}”(hj¼ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mbhj¸ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjµ h²hh³hÊh´Nubjg)�”}”(hŒmCreate the test script that will run (load/unload) the module e.g. ``tools/testing/selftests/lib/bitmap.sh`` ”h]”hÌ)�”}”(hŒlCreate the test script that will run (load/unload) the module e.g. ``tools/testing/selftests/lib/bitmap.sh``”h]”(hŒCCreate the test script that will run (load/unload) the module e.g. ”…”�”}”(hjÔ h²hh³Nh´Nubj )�”}”(hŒ)``tools/testing/selftests/lib/bitmap.sh``”h]”hŒ%tools/testing/selftests/lib/bitmap.sh”…”�”}”(hjÜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÔ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MdhjÐ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjµ h²hh³hÊh´Nubjg)�”}”(hŒDAdd line to config file e.g. ``tools/testing/selftests/lib/config`` ”h]”hÌ)�”}”(hŒCAdd line to config file e.g. ``tools/testing/selftests/lib/config``”h]”(hŒAdd line to config file e.g. ”…”�”}”(hjú h²hh³Nh´Nubj )�”}”(hŒ&``tools/testing/selftests/lib/config``”h]”hŒ"tools/testing/selftests/lib/config”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjú ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mghjö ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjµ h²hh³hÊh´Nubjg)�”}”(hŒKAdd test script to makefile e.g. ``tools/testing/selftests/lib/Makefile`` ”h]”hÌ)�”}”(hŒJAdd test script to makefile e.g. ``tools/testing/selftests/lib/Makefile``”h]”(hŒ"Add test script to makefile e.g. ”…”�”}”(hj h²hh³Nh´Nubj )�”}”(hŒ(``tools/testing/selftests/lib/Makefile``”h]”hŒ$tools/testing/selftests/lib/Makefile”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mihj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjµ h²hh³hÊh´Nubjg)�”}”(hŒVerify it works: ”h]”hÌ)�”}”(hŒVerify it works:”h]”hŒVerify it works:”…”�”}”(hjF h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MkhjB ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjµ h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1j³ hj” h²hh³hÊh´Mbubj¡)�”}”(hŒ©# Assumes you have booted a fresh build of this kernel tree cd /path/to/linux/tree make kselftest-merge make modules sudo make modules_install make TARGETS=lib kselftest”h]”hŒ©# Assumes you have booted a fresh build of this kernel tree cd /path/to/linux/tree make kselftest-merge make modules sudo make modules_install make TARGETS=lib kselftest”…”�”}”hje sbah}”(h]”h ]”h"]”h$]”h&]”j°j±Œforce”‰Œlanguage”Œsh”Œhighlight_args”}”uh1j h³hÊh´Mmhj” h²hubeh}”(h]”Œ how-to-use”ah ]”h"]”Œ how to use”ah$]”h&]”uh1hµhj h²hh³hÊh´M]ubh¶)�”}”(hhh]”(h»)�”}”(hŒExample Module”h]”hŒExample Module”…”�”}”(hjƒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj€ h²hh³hÊh´MwubhÌ)�”}”(hŒ.A bare bones test module might look like this:”h]”hŒ.A bare bones test module might look like this:”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Myhj€ h²hubj¡)�”}”(hXß// SPDX-License-Identifier: GPL-2.0+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #include "../tools/testing/selftests/kselftest_module.h" KSTM_MODULE_GLOBALS(); /* * Kernel module for testing the foobinator */ static int __init test_function() { ... } static void __init selftest(void) { KSTM_CHECK_ZERO(do_test_case("", 0)); } KSTM_MODULE_LOADERS(test_foo); MODULE_AUTHOR("John Developer "); MODULE_LICENSE("GPL"); MODULE_INFO(test, "Y");”h]”hXß// SPDX-License-Identifier: GPL-2.0+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #include "../tools/testing/selftests/kselftest_module.h" KSTM_MODULE_GLOBALS(); /* * Kernel module for testing the foobinator */ static int __init test_function() { ... } static void __init selftest(void) { KSTM_CHECK_ZERO(do_test_case("", 0)); } KSTM_MODULE_LOADERS(test_foo); MODULE_AUTHOR("John Developer "); MODULE_LICENSE("GPL"); MODULE_INFO(test, "Y");”…”�”}”hjŸ sbah}”(h]”h ]”h"]”h$]”h&]”j°j±js ‰jt Œc”jv }”uh1j h³hÊh´M{hj€ h²hubeh}”(h]”Œexample-module”ah ]”h"]”Œexample module”ah$]”h&]”uh1hµhj h²hh³hÊh´Mwubh¶)�”}”(hhh]”(h»)�”}”(hŒExample test script”h]”hŒExample test script”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj· h²hh³hÊh´M™ubj¡)�”}”(hŒc#!/bin/bash # SPDX-License-Identifier: GPL-2.0+ $(dirname $0)/../kselftest/module.sh "foo" test_foo”h]”hŒc#!/bin/bash # SPDX-License-Identifier: GPL-2.0+ $(dirname $0)/../kselftest/module.sh "foo" test_foo”…”�”}”hjÈ sbah}”(h]”h ]”h"]”h$]”h&]”j°j±js ‰jt Œsh”jv }”uh1j h³hÊh´M›hj· h²hubeh}”(h]”Œexample-test-script”ah ]”h"]”Œexample test script”ah$]”h&]”uh1hµhj h²hh³hÊh´M™ubeh}”(h]”j(ah ]”h"]”Œ test module”ah$]”h&]”uh1hµhh·h²hh³hÊh´MHj…Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ Test Harness”h]”hŒ Test Harness”…”�”}”(hjê h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjç h²hh³hÊh´M£ubhÌ)�”}”(hŒ£The kselftest_harness.h file contains useful helpers to build tests. The test harness is for userspace testing, for kernel space testing see `Test Module`_ above.”h]”(hŒŽThe kselftest_harness.h file contains useful helpers to build tests. The test harness is for userspace testing, for kernel space testing see ”…”�”}”(hjø h²hh³Nh´Nubj)�”}”(hŒ`Test Module`_”h]”hŒ Test Module”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ Test Module”jj(uh1hÿhjø jKubhŒ above.”…”�”}”(hjø h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¥hjç h²hubhÌ)�”}”(hŒTThe tests from tools/testing/selftests/seccomp/seccomp_bpf.c can be used as example.”h]”hŒTThe tests from tools/testing/selftests/seccomp/seccomp_bpf.c can be used as example.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M©hjç h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒExample”h]”hŒExample”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj( h²hh³hÊh´M­ubj¡)�”}”(hX—#include "kselftest_harness.h" TEST(standalone_test) { do_some_stuff; EXPECT_GT(10, stuff) { stuff_state_t state; enumerate_stuff_state(&state); TH_LOG("expectation failed with state: %s", state.msg); } more_stuff; ASSERT_NE(some_stuff, NULL) TH_LOG("how did it happen?!"); last_stuff; EXPECT_EQ(0, last_stuff); } FIXTURE(my_fixture) { mytype_t *data; int awesomeness_level; }; FIXTURE_SETUP(my_fixture) { self->data = mytype_new(); ASSERT_NE(NULL, self->data); } FIXTURE_TEARDOWN(my_fixture) { mytype_free(self->data); } TEST_F(my_fixture, data_is_good) { EXPECT_EQ(1, is_my_data_good(self->data)); } TEST_HARNESS_MAIN”h]”hX—#include "kselftest_harness.h" TEST(standalone_test) { do_some_stuff; EXPECT_GT(10, stuff) { stuff_state_t state; enumerate_stuff_state(&state); TH_LOG("expectation failed with state: %s", state.msg); } more_stuff; ASSERT_NE(some_stuff, NULL) TH_LOG("how did it happen?!"); last_stuff; EXPECT_EQ(0, last_stuff); } FIXTURE(my_fixture) { mytype_t *data; int awesomeness_level; }; FIXTURE_SETUP(my_fixture) { self->data = mytype_new(); ASSERT_NE(NULL, self->data); } FIXTURE_TEARDOWN(my_fixture) { mytype_free(self->data); } TEST_F(my_fixture, data_is_good) { EXPECT_EQ(1, is_my_data_good(self->data)); } TEST_HARNESS_MAIN”…”�”}”hj9 sbah}”(h]”h ]”h"]”h$]”h&]”j°j±js ‰jt j­ jv }”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:431: ./tools/testing/selftests/kselftest_harness.h”h´K hj( h²hubeh}”(h]”Œexample”ah ]”h"]”Œexample”ah$]”h&]”uh1hµhjç h²hh³hÊh´M­ubh¶)�”}”(hhh]”(h»)�”}”(hŒHelpers”h]”hŒHelpers”…”�”}”(hjT h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjQ h²hh³hÊh´M´ubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”ŒTH_LOG (C macro)”Œc.TH_LOG”hNt”auh1jb hjQ h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒTH_LOG”h]”hŒdesc_signature_line”“”)�”}”(hŒTH_LOG”h]”hŒ desc_name”“”)�”}”(hŒTH_LOG”h]”hŒ desc_sig_name”“”)�”}”(hj} h]”hŒTH_LOG”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j‹ hj‡ ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”j°j±uh1j… hj� h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´K^ubah}”(h]”h ]”h"]”h$]”h&]”j°j±Œ add_permalink”ˆuh1j Œsphinx_line_type”Œ declarator”hj{ h²hh³j£ h´K^ubah}”(h]”jq ah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jy h³j£ h´K^hjv h²hubhŒ desc_content”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hjv h²hh³j£ h´K^ubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”Œdomain”j­ Œobjtype”jÆ Œdesctype”jÆ Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jt h²hhjQ h³js h´NubhÌ)�”}”(hŒ``TH_LOG (fmt, ...)``”h]”j )�”}”(hjÒ h]”hŒTH_LOG (fmt, ...)”…”�”}”(hjÔ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÐ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´K`hjQ h²hubhŒ container”“”)�”}”(hX[**Parameters** ``fmt`` format string ``...`` optional arguments **Description** .. code-block:: c TH_LOG(format, ...) Optional debug logging function available for use in tests. Logging may be enabled or disabled by defining TH_LOG_ENABLED. E.g., #define TH_LOG_ENABLED 1 If no definition is provided, logging is enabled by default.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”hŒstrong”“”)�”}”(hjð h]”hŒ Parameters”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjî ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Kbhjê ubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ``fmt`` format string ”h]”(hŒterm”“”)�”}”(hŒ``fmt``”h]”j )�”}”(hj h]”hŒfmt”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´K`hj ubhŒ definition”“”)�”}”(hhh]”hÌ)�”}”(hŒ format string”h]”hŒ format string”…”�”}”(hj2 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j, h´K`hj/ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j, h´K`hj ubj )�”}”(hŒ``...`` optional arguments ”h]”(j )�”}”(hŒ``...``”h]”j )�”}”(hjR h]”hŒ...”…”�”}”(hjT h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjP ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´KahjL ubj. )�”}”(hhh]”hÌ)�”}”(hŒoptional arguments”h]”hŒoptional arguments”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jg h´Kahjh ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjL ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jg h´Kahj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjê ubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hj� h]”hŒ Description”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj‹ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Kchjê ubj¡)�”}”(hŒTH_LOG(format, ...)”h]”hŒTH_LOG(format, ...)”…”�”}”hj£ sbah}”(h]”h ]”h"]”h$]”h&]”j°j±js ‰jt j­ jv }”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´K_hjê ubhÌ)�”}”(hŒ™Optional debug logging function available for use in tests. Logging may be enabled or disabled by defining TH_LOG_ENABLED. E.g., #define TH_LOG_ENABLED 1”h]”hŒ™Optional debug logging function available for use in tests. Logging may be enabled or disabled by defining TH_LOG_ENABLED. E.g., #define TH_LOG_ENABLED 1”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Kchjê ubhÌ)�”}”(hŒsbah}”(h]”h ]”h"]”h$]”h&]”j°j±js ‰jt j­ jv }”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´KÑhjÈubhÌ)�”}”(hŒÝAlmost always, you want just FIXTURE() instead (see below). This call may be used when the type of the fixture data is needed. In general, this should not be needed unless the *self* is being passed to a helper directly.”h]”(hŒ±Almost always, you want just FIXTURE() instead (see below). This call may be used when the type of the fixture data is needed. In general, this should not be needed unless the ”…”�”}”(hjNh²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*self*”h]”hŒself”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjNubhŒ& is being passed to a helper directly.”…”�”}”(hjNh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´KÕhjÈubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hjQ h²hh³js h´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒFIXTURE (C macro)”Œ c.FIXTURE”hNt”auh1jb hjQ h²hh³js h´Nubju )�”}”(hhh]”(jz )�”}”(hŒFIXTURE”h]”j€ )�”}”(hŒFIXTURE”h]”j† )�”}”(hŒFIXTURE”h]”jŒ )�”}”(hj‹h]”hŒFIXTURE”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hj‘ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hj�h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´KÞubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hj‰h²hh³j¨h´KÞubah}”(h]”j„ah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³j¨h´KÞhj†h²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hj†h²hh³j¨h´KÞubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË jÁjÌ jÁjÍ ‰jÎ ‰jÏ ‰uh1jt h²hhjQ h³js h´NubhÌ)�”}”(hŒ``FIXTURE (fixture_name)``”h]”j )�”}”(hjÇh]”hŒFIXTURE (fixture_name)”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´KàhjQ h²hubj\)�”}”(hŒ7Called once per fixture to setup the data and register ”h]”hÌ)�”}”(hŒ6Called once per fixture to setup the data and register”h]”hŒ6Called once per fixture to setup the data and register”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´KÞhjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jïh´KÞhjQ h²hubjé )�”}”(hX,**Parameters** ``fixture_name`` fixture name **Description** .. code-block:: c FIXTURE(fixture_name) { type property1; ... }; Defines the data provided to TEST_F()-defined tests as *self*. It should be populated and cleaned up using FIXTURE_SETUP() and FIXTURE_TEARDOWN().”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hjüh]”hŒ Parameters”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjúubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Kâhjöubj )�”}”(hhh]”j )�”}”(hŒ``fixture_name`` fixture name ”h]”(j )�”}”(hŒ``fixture_name``”h]”j )�”}”(hjh]”hŒ fixture_name”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Káhjubj. )�”}”(hhh]”hÌ)�”}”(hŒ fixture name”h]”hŒ fixture name”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j0h´Káhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j0h´Káhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjöubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hjVh]”hŒ Description”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Kãhjöubj¡)�”}”(hŒ2FIXTURE(fixture_name) { type property1; ... };”h]”hŒ2FIXTURE(fixture_name) { type property1; ... };”…”�”}”hjlsbah}”(h]”h ]”h"]”h$]”h&]”j°j±js ‰jt j­ jv }”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´KâhjöubhÌ)�”}”(hŒ“Defines the data provided to TEST_F()-defined tests as *self*. It should be populated and cleaned up using FIXTURE_SETUP() and FIXTURE_TEARDOWN().”h]”(hŒ7Defines the data provided to TEST_F()-defined tests as ”…”�”}”(hj|h²hh³Nh´NubjW)�”}”(hŒ*self*”h]”hŒself”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj|ubhŒV. It should be populated and cleaned up using FIXTURE_SETUP() and FIXTURE_TEARDOWN().”…”�”}”(hj|h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Kéhjöubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hjQ h²hh³js h´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒFIXTURE_SETUP (C macro)”Œc.FIXTURE_SETUP”hNt”auh1jb hjQ h²hh³js h´Nubju )�”}”(hhh]”(jz )�”}”(hŒ FIXTURE_SETUP”h]”j€ )�”}”(hŒ FIXTURE_SETUP”h]”j† )�”}”(hŒ FIXTURE_SETUP”h]”jŒ )�”}”(hj·h]”hŒ FIXTURE_SETUP”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hj½ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hj¹h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Kùubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hjµh²hh³jÔh´Kùubah}”(h]”j°ah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³jÔh´Kùhj²h²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hj²h²hh³jÔh´Kùubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË jíjÌ jíjÍ ‰jÎ ‰jÏ ‰uh1jt h²hhjQ h³js h´NubhÌ)�”}”(hŒ ``FIXTURE_SETUP (fixture_name)``”h]”j )�”}”(hjóh]”hŒFIXTURE_SETUP (fixture_name)”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´KûhjQ h²hubj\)�”}”(hŒuPrepares the setup function for the fixture. *_metadata* is included so that EXPECT_*, ASSERT_* etc. work correctly. ”h]”hÌ)�”}”(hŒtPrepares the setup function for the fixture. *_metadata* is included so that EXPECT_*, ASSERT_* etc. work correctly.”h]”(hŒ-Prepares the setup function for the fixture. ”…”�”}”(hj h²hh³Nh´NubjW)�”}”(hŒ *_metadata*”h]”hŒ _metadata”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj ubhŒ< is included so that EXPECT_*, ASSERT_* etc. work correctly.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Kùhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j-h´KùhjQ h²hubjé )�”}”(hXÍ**Parameters** ``fixture_name`` fixture name **Description** .. code-block:: c FIXTURE_SETUP(fixture_name) { implementation } Populates the required "setup" function for a fixture. An instance of the datatype defined with FIXTURE_DATA() will be exposed as *self* for the implementation. ASSERT_* are valid for use in this context and will prempt the execution of any dependent fixture tests. A bare "return;" statement may be used to return early.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hj:h]”hŒ Parameters”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Kýhj4ubj )�”}”(hhh]”j )�”}”(hŒ``fixture_name`` fixture name ”h]”(j )�”}”(hŒ``fixture_name``”h]”j )�”}”(hjYh]”hŒ fixture_name”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjWubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´KühjSubj. )�”}”(hhh]”hÌ)�”}”(hŒ fixture name”h]”hŒ fixture name”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jnh´Kühjoubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jnh´KühjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj4ubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hj”h]”hŒ Description”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Kþhj4ubj¡)�”}”(hŒ.FIXTURE_SETUP(fixture_name) { implementation }”h]”hŒ.FIXTURE_SETUP(fixture_name) { implementation }”…”�”}”hjªsbah}”(h]”h ]”h"]”h$]”h&]”j°j±js ‰jt j­ jv }”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Kýhj4ubhÌ)�”}”(hŒ¡Populates the required "setup" function for a fixture. An instance of the datatype defined with FIXTURE_DATA() will be exposed as *self* for the implementation.”h]”(hŒ‡Populates the required “setupâ€� function for a fixture. An instance of the datatype defined with FIXTURE_DATA() will be exposed as ”…”�”}”(hjºh²hh³Nh´NubjW)�”}”(hŒ*self*”h]”hŒself”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjºubhŒ for the implementation.”…”�”}”(hjºh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Mhj4ubhÌ)�”}”(hŒhASSERT_* are valid for use in this context and will prempt the execution of any dependent fixture tests.”h]”hŒhASSERT_* are valid for use in this context and will prempt the execution of any dependent fixture tests.”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Mhj4ubhÌ)�”}”(hŒ7A bare "return;" statement may be used to return early.”h]”hŒ;A bare “return;â€� statement may be used to return early.”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Mhj4ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hjQ h²hh³js h´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒFIXTURE_TEARDOWN (C macro)”Œc.FIXTURE_TEARDOWN”hNt”auh1jb hjQ h²hh³js h´Nubju )�”}”(hhh]”(jz )�”}”(hŒFIXTURE_TEARDOWN”h]”j€ )�”}”(hŒFIXTURE_TEARDOWN”h]”j† )�”}”(hŒFIXTURE_TEARDOWN”h]”jŒ )�”}”(hjh]”hŒFIXTURE_TEARDOWN”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hjubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hjh²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hjh²hh³j0h´Mubah}”(h]”j ah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³j0h´Mhjh²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hjh²hh³j0h´Mubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË jIjÌ jIjÍ ‰jÎ ‰jÏ ‰uh1jt h²hhjQ h³js h´NubhÌ)�”}”(hŒ#``FIXTURE_TEARDOWN (fixture_name)``”h]”j )�”}”(hjOh]”hŒFIXTURE_TEARDOWN (fixture_name)”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MhjQ h²hubjé )�”}”(hX¿**Parameters** ``fixture_name`` fixture name **Description** *_metadata* is included so that EXPECT_*, ASSERT_* etc. work correctly. .. code-block:: c FIXTURE_TEARDOWN(fixture_name) { implementation } Populates the required "teardown" function for a fixture. An instance of the datatype defined with FIXTURE_DATA() will be exposed as *self* for the implementation to clean up. A bare "return;" statement may be used to return early.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hjkh]”hŒ Parameters”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Mhjeubj )�”}”(hhh]”j )�”}”(hŒ``fixture_name`` fixture name ”h]”(j )�”}”(hŒ``fixture_name``”h]”j )�”}”(hjŠh]”hŒ fixture_name”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Mhj„ubj. )�”}”(hhh]”hÌ)�”}”(hŒ fixture name”h]”hŒ fixture name”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jŸh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hj„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jŸh´Mhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjeubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hjÅh]”hŒ Description”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MhjeubhÌ)�”}”(hŒG*_metadata* is included so that EXPECT_*, ASSERT_* etc. work correctly.”h]”(jW)�”}”(hŒ *_metadata*”h]”hŒ _metadata”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÛubhŒ< is included so that EXPECT_*, ASSERT_* etc. work correctly.”…”�”}”(hjÛh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Mhjeubj¡)�”}”(hŒ1FIXTURE_TEARDOWN(fixture_name) { implementation }”h]”hŒ1FIXTURE_TEARDOWN(fixture_name) { implementation }”…”�”}”hjøsbah}”(h]”h ]”h"]”h$]”h&]”j°j±js ‰jt j­ jv }”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MhjeubhÌ)�”}”(hŒ°Populates the required "teardown" function for a fixture. An instance of the datatype defined with FIXTURE_DATA() will be exposed as *self* for the implementation to clean up.”h]”(hŒŠPopulates the required “teardownâ€� function for a fixture. An instance of the datatype defined with FIXTURE_DATA() will be exposed as ”…”�”}”(hjh²hh³Nh´NubjW)�”}”(hŒ*self*”h]”hŒself”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjubhŒ$ for the implementation to clean up.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MhjeubhÌ)�”}”(hŒ7A bare "return;" statement may be used to return early.”h]”hŒ;A bare “return;â€� statement may be used to return early.”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Mhjeubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hjQ h²hh³js h´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒFIXTURE_VARIANT (C macro)”Œc.FIXTURE_VARIANT”hNt”auh1jb hjQ h²hh³js h´Nubju )�”}”(hhh]”(jz )�”}”(hŒFIXTURE_VARIANT”h]”j€ )�”}”(hŒFIXTURE_VARIANT”h]”j† )�”}”(hŒFIXTURE_VARIANT”h]”jŒ )�”}”(hjRh]”hŒFIXTURE_VARIANT”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hjXubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hjTh²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MDubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hjPh²hh³joh´MDubah}”(h]”jKah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³joh´MDhjMh²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hjMh²hh³joh´MDubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË jˆjÌ jˆjÍ ‰jÎ ‰jÏ ‰uh1jt h²hhjQ h³js h´NubhÌ)�”}”(hŒ"``FIXTURE_VARIANT (fixture_name)``”h]”j )�”}”(hjŽh]”hŒFIXTURE_VARIANT (fixture_name)”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MFhjQ h²hubj\)�”}”(hŒ>Optionally called once per fixture to declare fixture variant ”h]”hÌ)�”}”(hŒ=Optionally called once per fixture to declare fixture variant”h]”hŒ=Optionally called once per fixture to declare fixture variant”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MDhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j¶h´MDhjQ h²hubjé )�”}”(hXO**Parameters** ``fixture_name`` fixture name **Description** .. code-block:: c FIXTURE_VARIANT(fixture_name) { type property1; ... }; Defines type of constant parameters provided to FIXTURE_SETUP(), TEST_F() and FIXTURE_TEARDOWN as *variant*. Variants allow the same tests to be run with different arguments.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hjÃh]”hŒ Parameters”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MHhj½ubj )�”}”(hhh]”j )�”}”(hŒ``fixture_name`` fixture name ”h]”(j )�”}”(hŒ``fixture_name``”h]”j )�”}”(hjâh]”hŒ fixture_name”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MGhjÜubj. )�”}”(hhh]”hÌ)�”}”(hŒ fixture name”h]”hŒ fixture name”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j÷h´MGhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j÷h´MGhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj½ubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MIhj½ubj¡)�”}”(hŒ:FIXTURE_VARIANT(fixture_name) { type property1; ... };”h]”hŒ:FIXTURE_VARIANT(fixture_name) { type property1; ... };”…”�”}”hj3sbah}”(h]”h ]”h"]”h$]”h&]”j°j±js ‰jt j­ jv }”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MHhj½ubhÌ)�”}”(hŒ®Defines type of constant parameters provided to FIXTURE_SETUP(), TEST_F() and FIXTURE_TEARDOWN as *variant*. Variants allow the same tests to be run with different arguments.”h]”(hŒbDefines type of constant parameters provided to FIXTURE_SETUP(), TEST_F() and FIXTURE_TEARDOWN as ”…”�”}”(hjCh²hh³Nh´NubjW)�”}”(hŒ *variant*”h]”hŒvariant”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjCubhŒC. Variants allow the same tests to be run with different arguments.”…”�”}”(hjCh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MOhj½ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hjQ h²hh³js h´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒFIXTURE_VARIANT_ADD (C macro)”Œc.FIXTURE_VARIANT_ADD”hNt”auh1jb hjQ h²hh³js h´Nubju )�”}”(hhh]”(jz )�”}”(hŒFIXTURE_VARIANT_ADD”h]”j€ )�”}”(hŒFIXTURE_VARIANT_ADD”h]”j† )�”}”(hŒFIXTURE_VARIANT_ADD”h]”jŒ )�”}”(hj~h]”hŒFIXTURE_VARIANT_ADD”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hj„ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hj€h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MWubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hj|h²hh³j›h´MWubah}”(h]”jwah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³j›h´MWhjyh²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hjyh²hh³j›h´MWubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË j´jÌ j´jÍ ‰jÎ ‰jÏ ‰uh1jt h²hhjQ h³js h´NubhÌ)�”}”(hŒ4``FIXTURE_VARIANT_ADD (fixture_name, variant_name)``”h]”j )�”}”(hjºh]”hŒ0FIXTURE_VARIANT_ADD (fixture_name, variant_name)”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MYhjQ h²hubj\)�”}”(hŒ?Called once per fixture variant to setup and register the data ”h]”hÌ)�”}”(hŒ>Called once per fixture variant to setup and register the data”h]”hŒ>Called once per fixture variant to setup and register the data”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MWhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jâh´MWhjQ h²hubjé )�”}”(hXz**Parameters** ``fixture_name`` fixture name ``variant_name`` name of the parameter set **Description** .. code-block:: c FIXTURE_VARIANT_ADD(fixture_name, variant_name) { .property1 = val1, ... }; Defines a variant of the test fixture, provided to FIXTURE_SETUP() and TEST_F() as *variant*. Tests of each fixture will be run once for each variant.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hjïh]”hŒ Parameters”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjíubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´M[hjéubj )�”}”(hhh]”(j )�”}”(hŒ``fixture_name`` fixture name ”h]”(j )�”}”(hŒ``fixture_name``”h]”j )�”}”(hjh]”hŒ fixture_name”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MZhjubj. )�”}”(hhh]”hÌ)�”}”(hŒ fixture name”h]”hŒ fixture name”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j#h´MZhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j#h´MZhjubj )�”}”(hŒ+``variant_name`` name of the parameter set ”h]”(j )�”}”(hŒ``variant_name``”h]”j )�”}”(hjGh]”hŒ variant_name”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´M[hjAubj. )�”}”(hhh]”hÌ)�”}”(hŒname of the parameter set”h]”hŒname of the parameter set”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j\h´M[hj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j\h´M[hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjéubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hj‚h]”hŒ Description”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´M]hjéubj¡)�”}”(hŒOFIXTURE_VARIANT_ADD(fixture_name, variant_name) { .property1 = val1, ... };”h]”hŒOFIXTURE_VARIANT_ADD(fixture_name, variant_name) { .property1 = val1, ... };”…”�”}”hj˜sbah}”(h]”h ]”h"]”h$]”h&]”j°j±js ‰jt j­ jv }”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´M\hjéubhÌ)�”}”(hŒ–Defines a variant of the test fixture, provided to FIXTURE_SETUP() and TEST_F() as *variant*. Tests of each fixture will be run once for each variant.”h]”(hŒSDefines a variant of the test fixture, provided to FIXTURE_SETUP() and TEST_F() as ”…”�”}”(hj¨h²hh³Nh´NubjW)�”}”(hŒ *variant*”h]”hŒvariant”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¨ubhŒ:. Tests of each fixture will be run once for each variant.”…”�”}”(hj¨h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Mchjéubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hjQ h²hh³js h´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒTEST_F (C macro)”Œc.TEST_F”hNt”auh1jb hjQ h²hh³js h´Nubju )�”}”(hhh]”(jz )�”}”(hŒTEST_F”h]”j€ )�”}”(hŒTEST_F”h]”j† )�”}”(hŒTEST_F”h]”jŒ )�”}”(hjãh]”hŒTEST_F”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hjéubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hjåh²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Myubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hjáh²hh³jh´Myubah}”(h]”jÜah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³jh´MyhjÞh²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hjÞh²hh³jh´Myubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË jjÌ jjÍ ‰jÎ ‰jÏ ‰uh1jt h²hhjQ h³js h´NubhÌ)�”}”(hŒ$``TEST_F (fixture_name, test_name)``”h]”j )�”}”(hjh]”hŒ TEST_F (fixture_name, test_name)”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´M{hjQ h²hubj\)�”}”(hŒAEmits test registration and helpers for fixture-based test cases ”h]”hÌ)�”}”(hŒ@Emits test registration and helpers for fixture-based test cases”h]”hŒ@Emits test registration and helpers for fixture-based test cases”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Myhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jGh´MyhjQ h²hubjé )�”}”(hXx**Parameters** ``fixture_name`` fixture name ``test_name`` test name **Description** .. code-block:: c TEST_F(fixture, name) { implementation } Defines a test that depends on a fixture (e.g., is part of a test case). Very similar to TEST() except that *self* is the setup instance of fixture's datatype exposed for use by the implementation. The _metadata object is shared (MAP_SHARED) with all the potential forked processes, which enables them to use EXCEPT_*() and ASSERT_*(). The *self* object is only shared with the potential forked processes if FIXTURE_TEARDOWN_PARENT() is used instead of FIXTURE_TEARDOWN().”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hjTh]”hŒ Parameters”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjRubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´M}hjNubj )�”}”(hhh]”(j )�”}”(hŒ``fixture_name`` fixture name ”h]”(j )�”}”(hŒ``fixture_name``”h]”j )�”}”(hjsh]”hŒ fixture_name”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´M|hjmubj. )�”}”(hhh]”hÌ)�”}”(hŒ fixture name”h]”hŒ fixture name”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jˆh´M|hj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjmubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jˆh´M|hjjubj )�”}”(hŒ``test_name`` test name ”h]”(j )�”}”(hŒ ``test_name``”h]”j )�”}”(hj¬h]”hŒ test_name”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´M}hj¦ubj. )�”}”(hhh]”hÌ)�”}”(hŒ test name”h]”hŒ test name”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÁh´M}hjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jÁh´M}hjjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjNubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hjçh]”hŒ Description”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjåubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MhjNubj¡)�”}”(hŒ(TEST_F(fixture, name) { implementation }”h]”hŒ(TEST_F(fixture, name) { implementation }”…”�”}”hjýsbah}”(h]”h ]”h"]”h$]”h&]”j°j±js ‰jt j­ jv }”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´M~hjNubhÌ)�”}”(hŒÅDefines a test that depends on a fixture (e.g., is part of a test case). Very similar to TEST() except that *self* is the setup instance of fixture's datatype exposed for use by the implementation.”h]”(hŒlDefines a test that depends on a fixture (e.g., is part of a test case). Very similar to TEST() except that ”…”�”}”(hj h²hh³Nh´NubjW)�”}”(hŒ*self*”h]”hŒself”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj ubhŒU is the setup instance of fixture’s datatype exposed for use by the implementation.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´M‚hjNubhÌ)�”}”(hŒ‰The _metadata object is shared (MAP_SHARED) with all the potential forked processes, which enables them to use EXCEPT_*() and ASSERT_*().”h]”hŒ‰The _metadata object is shared (MAP_SHARED) with all the potential forked processes, which enables them to use EXCEPT_*() and ASSERT_*().”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´M†hjNubhÌ)�”}”(hŒˆThe *self* object is only shared with the potential forked processes if FIXTURE_TEARDOWN_PARENT() is used instead of FIXTURE_TEARDOWN().”h]”(hŒThe ”…”�”}”(hj=h²hh³Nh´NubjW)�”}”(hŒ*self*”h]”hŒself”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj=ubhŒ~ object is only shared with the potential forked processes if FIXTURE_TEARDOWN_PARENT() is used instead of FIXTURE_TEARDOWN().”…”�”}”(hj=h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´M‰hjNubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hjQ h²hh³js h´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒTEST_HARNESS_MAIN (C macro)”Œc.TEST_HARNESS_MAIN”hNt”auh1jb hjQ h²hh³js h´Nubju )�”}”(hhh]”(jz )�”}”(hŒTEST_HARNESS_MAIN”h]”j€ )�”}”(hŒTEST_HARNESS_MAIN”h]”j† )�”}”(hŒTEST_HARNESS_MAIN”h]”jŒ )�”}”(hjxh]”hŒTEST_HARNESS_MAIN”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hj~ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hjzh²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´Mìubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hjvh²hh³j•h´Mìubah}”(h]”jqah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³j•h´Mìhjsh²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hjsh²hh³j•h´Mìubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË j®jÌ j®jÍ ‰jÎ ‰jÏ ‰uh1jt h²hhjQ h³js h´NubhÌ)�”}”(hŒ``TEST_HARNESS_MAIN``”h]”j )�”}”(hj´h]”hŒTEST_HARNESS_MAIN”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MîhjQ h²hubj\)�”}”(hŒ“ Simple wrapper to run the test harness **Description** .. code-block:: c TEST_HARNESS_MAIN Use once to append a main() to the test file. ”h]”(j\)�”}”(hŒ'Simple wrapper to run the test harness ”h]”hÌ)�”}”(hŒ&Simple wrapper to run the test harness”h]”hŒ&Simple wrapper to run the test harness”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MìhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jàh´MìhjÊubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hjéh]”hŒ Description”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjçubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MîhjÊubj¡)�”}”(hŒTEST_HARNESS_MAIN”h]”hŒTEST_HARNESS_MAIN”…”�”}”hjÿsbah}”(h]”h ]”h"]”h$]”h&]”j°j±js ‰jt j­ jv }”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MíhjÊubhÌ)�”}”(hŒ-Use once to append a main() to the test file.”h]”hŒ-Use once to append a main() to the test file.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:438: ./tools/testing/selftests/kselftest_harness.h”h´MñhjÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jàh´MìhjQ h²hubeh}”(h]”Œhelpers”ah ]”h"]”Œhelpers”ah$]”h&]”uh1hµhjç h²hh³hÊh´M´ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Operators”h]”hŒ Operators”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj,h²hh³hÊh´M¼ubhÌ)�”}”(hŒ¡Operators for use in TEST() and TEST_F(). ASSERT_* calls will stop test execution immediately. EXPECT_* calls will emit a failure warning, note it, and continue.”h]”hŒ¡Operators for use in TEST() and TEST_F(). ASSERT_* calls will stop test execution immediately. EXPECT_* calls will emit a failure warning, note it, and continue.”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:446: ./tools/testing/selftests/kselftest_harness.h”h´Múhj,h²hubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒASSERT_EQ (C macro)”Œ c.ASSERT_EQ”hNt”auh1jb hj,h²hh³Nh´Nubju )�”}”(hhh]”(jz )�”}”(hŒ ASSERT_EQ”h]”j€ )�”}”(hŒ ASSERT_EQ”h]”j† )�”}”(hŒ ASSERT_EQ”h]”jŒ )�”}”(hj_h]”hŒ ASSERT_EQ”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hjeubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hjah²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hj]h²hh³j|h´Mubah}”(h]”jXah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³j|h´MhjZh²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hjZh²hh³j|h´Mubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË j•jÌ j•jÍ ‰jÎ ‰jÏ ‰uh1jt h²hhj,h³Nh´NubhÌ)�”}”(hŒ``ASSERT_EQ (expected, seen)``”h]”j )�”}”(hj›h]”hŒASSERT_EQ (expected, seen)”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mhj,h²hubjé )�”}”(hŒŽ**Parameters** ``expected`` expected value ``seen`` measured value **Description** ASSERT_EQ(expected, measured): expected == measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hj·h]”hŒ Parameters”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjµubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mhj±ubj )�”}”(hhh]”(j )�”}”(hŒ``expected`` expected value ”h]”(j )�”}”(hŒ ``expected``”h]”j )�”}”(hjÖh]”hŒexpected”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MhjÐubj. )�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jëh´Mhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jëh´MhjÍubj )�”}”(hŒ``seen`` measured value ”h]”(j )�”}”(hŒ``seen``”h]”j )�”}”(hjh]”hŒseen”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mhj ubj. )�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j$h´Mhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j$h´MhjÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj±ubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hjJh]”hŒ Description”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjHubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mhj±ubhÌ)�”}”(hŒ3ASSERT_EQ(expected, measured): expected == measured”h]”hŒ3ASSERT_EQ(expected, measured): expected == measured”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mhj±ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hj,h²hh³Nh´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒASSERT_NE (C macro)”Œ c.ASSERT_NE”hNt”auh1jb hj,h²hh³Nh´Nubju )�”}”(hhh]”(jz )�”}”(hŒ ASSERT_NE”h]”j€ )�”}”(hŒ ASSERT_NE”h]”j† )�”}”(hŒ ASSERT_NE”h]”jŒ )�”}”(hj‰h]”hŒ ASSERT_NE”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hj�ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hj‹h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M ubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hj‡h²hh³j¦h´M ubah}”(h]”j‚ah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³j¦h´M hj„h²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hj„h²hh³j¦h´M ubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË j¿jÌ j¿jÍ ‰jÎ ‰jÏ ‰uh1jt h²hhj,h³Nh´NubhÌ)�”}”(hŒ``ASSERT_NE (expected, seen)``”h]”j )�”}”(hjÅh]”hŒASSERT_NE (expected, seen)”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mhj,h²hubjé )�”}”(hŒŽ**Parameters** ``expected`` expected value ``seen`` measured value **Description** ASSERT_NE(expected, measured): expected != measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hjáh]”hŒ Parameters”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjßubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MhjÛubj )�”}”(hhh]”(j )�”}”(hŒ``expected`` expected value ”h]”(j )�”}”(hŒ ``expected``”h]”j )�”}”(hjh]”hŒexpected”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mhjúubj. )�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjúubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jh´Mhj÷ubj )�”}”(hŒ``seen`` measured value ”h]”(j )�”}”(hŒ``seen``”h]”j )�”}”(hj9h]”hŒseen”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mhj3ubj. )�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jNh´MhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jNh´Mhj÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÛubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hjth]”hŒ Description”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjrubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MhjÛubhÌ)�”}”(hŒ3ASSERT_NE(expected, measured): expected != measured”h]”hŒ3ASSERT_NE(expected, measured): expected != measured”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MhjÛubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hj,h²hh³Nh´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒASSERT_LT (C macro)”Œ c.ASSERT_LT”hNt”auh1jb hj,h²hh³Nh´Nubju )�”}”(hhh]”(jz )�”}”(hŒ ASSERT_LT”h]”j€ )�”}”(hŒ ASSERT_LT”h]”j† )�”}”(hŒ ASSERT_LT”h]”jŒ )�”}”(hj³h]”hŒ ASSERT_LT”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hj¹ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hjµh²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hj±h²hh³jÐh´Mubah}”(h]”j¬ah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³jÐh´Mhj®h²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hj®h²hh³jÐh´Mubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË jéjÌ jéjÍ ‰jÎ ‰jÏ ‰uh1jt h²hhj,h³Nh´NubhÌ)�”}”(hŒ``ASSERT_LT (expected, seen)``”h]”j )�”}”(hjïh]”hŒASSERT_LT (expected, seen)”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mhj,h²hubjé )�”}”(hŒ�**Parameters** ``expected`` expected value ``seen`` measured value **Description** ASSERT_LT(expected, measured): expected < measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hj h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mhjubj )�”}”(hhh]”(j )�”}”(hŒ``expected`` expected value ”h]”(j )�”}”(hŒ ``expected``”h]”j )�”}”(hj*h]”hŒexpected”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mhj$ubj. )�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j?h´Mhj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hj$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j?h´Mhj!ubj )�”}”(hŒ``seen`` measured value ”h]”(j )�”}”(hŒ``seen``”h]”j )�”}”(hjch]”hŒseen”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mhj]ubj. )�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jxh´Mhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hj]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jxh´Mhj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hjžh]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjœubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MhjubhÌ)�”}”(hŒ2ASSERT_LT(expected, measured): expected < measured”h]”hŒ2ASSERT_LT(expected, measured): expected < measured”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hj,h²hh³Nh´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒASSERT_LE (C macro)”Œ c.ASSERT_LE”hNt”auh1jb hj,h²hh³Nh´Nubju )�”}”(hhh]”(jz )�”}”(hŒ ASSERT_LE”h]”j€ )�”}”(hŒ ASSERT_LE”h]”j† )�”}”(hŒ ASSERT_LE”h]”jŒ )�”}”(hjÝh]”hŒ ASSERT_LE”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hjãubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hjßh²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M#ubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hjÛh²hh³júh´M#ubah}”(h]”jÖah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³júh´M#hjØh²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hjØh²hh³júh´M#ubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË jjÌ jjÍ ‰jÎ ‰jÏ ‰uh1jt h²hhj,h³Nh´NubhÌ)�”}”(hŒ``ASSERT_LE (expected, seen)``”h]”j )�”}”(hjh]”hŒASSERT_LE (expected, seen)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M%hj,h²hubjé )�”}”(hŒŽ**Parameters** ``expected`` expected value ``seen`` measured value **Description** ASSERT_LE(expected, measured): expected <= measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hj5h]”hŒ Parameters”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M'hj/ubj )�”}”(hhh]”(j )�”}”(hŒ``expected`` expected value ”h]”(j )�”}”(hŒ ``expected``”h]”j )�”}”(hjTh]”hŒexpected”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M%hjNubj. )�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jih´M%hjjubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjNubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jih´M%hjKubj )�”}”(hŒ``seen`` measured value ”h]”(j )�”}”(hŒ``seen``”h]”j )�”}”(hj�h]”hŒseen”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M&hj‡ubj. )�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¢h´M&hj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hj‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j¢h´M&hjKubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj/ubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hjÈh]”hŒ Description”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M(hj/ubhÌ)�”}”(hŒ3ASSERT_LE(expected, measured): expected <= measured”h]”hŒ3ASSERT_LE(expected, measured): expected <= measured”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M$hj/ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hj,h²hh³Nh´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒASSERT_GT (C macro)”Œ c.ASSERT_GT”hNt”auh1jb hj,h²hh³Nh´Nubju )�”}”(hhh]”(jz )�”}”(hŒ ASSERT_GT”h]”j€ )�”}”(hŒ ASSERT_GT”h]”j† )�”}”(hŒ ASSERT_GT”h]”jŒ )�”}”(hjh]”hŒ ASSERT_GT”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hj ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hj h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M.ubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hjh²hh³j$h´M.ubah}”(h]”jah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³j$h´M.hjh²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hjh²hh³j$h´M.ubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË j=jÌ j=jÍ ‰jÎ ‰jÏ ‰uh1jt h²hhj,h³Nh´NubhÌ)�”}”(hŒ``ASSERT_GT (expected, seen)``”h]”j )�”}”(hjCh]”hŒASSERT_GT (expected, seen)”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M0hj,h²hubjé )�”}”(hŒ�**Parameters** ``expected`` expected value ``seen`` measured value **Description** ASSERT_GT(expected, measured): expected > measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hj_h]”hŒ Parameters”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M2hjYubj )�”}”(hhh]”(j )�”}”(hŒ``expected`` expected value ”h]”(j )�”}”(hŒ ``expected``”h]”j )�”}”(hj~h]”hŒexpected”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M0hjxubj. )�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j“h´M0hj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjxubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j“h´M0hjuubj )�”}”(hŒ``seen`` measured value ”h]”(j )�”}”(hŒ``seen``”h]”j )�”}”(hj·h]”hŒseen”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M1hj±ubj. )�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÌh´M1hjÍubah}”(h]”h ]”h"]”h$]”h&]”u•òh1j- hj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jÌh´M1hjuubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjYubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hjòh]”hŒ Description”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjðubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M3hjYubhÌ)�”}”(hŒ2ASSERT_GT(expected, measured): expected > measured”h]”hŒ2ASSERT_GT(expected, measured): expected > measured”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M/hjYubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hj,h²hh³Nh´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒASSERT_GE (C macro)”Œ c.ASSERT_GE”hNt”auh1jb hj,h²hh³Nh´Nubju )�”}”(hhh]”(jz )�”}”(hŒ ASSERT_GE”h]”j€ )�”}”(hŒ ASSERT_GE”h]”j† )�”}”(hŒ ASSERT_GE”h]”jŒ )�”}”(hj1 h]”hŒ ASSERT_GE”…”�”}”(hj; h²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hj7 ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hj3 h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M9ubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hj/ h²hh³jN h´M9ubah}”(h]”j* ah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³jN h´M9hj, h²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hj, h²hh³jN h´M9ubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË jg jÌ jg jÍ ‰jÎ ‰jÏ ‰uh1jt h²hhj,h³Nh´NubhÌ)�”}”(hŒ``ASSERT_GE (expected, seen)``”h]”j )�”}”(hjm h]”hŒASSERT_GE (expected, seen)”…”�”}”(hjo h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjk ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M;hj,h²hubjé )�”}”(hŒŽ**Parameters** ``expected`` expected value ``seen`` measured value **Description** ASSERT_GE(expected, measured): expected >= measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hj‰ h]”hŒ Parameters”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj‡ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M=hjƒ ubj )�”}”(hhh]”(j )�”}”(hŒ``expected`` expected value ”h]”(j )�”}”(hŒ ``expected``”h]”j )�”}”(hj¨ h]”hŒexpected”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj¦ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M;hj¢ ubj. )�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j½ h´M;hj¾ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hj¢ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j½ h´M;hjŸ ubj )�”}”(hŒ``seen`` measured value ”h]”(j )�”}”(hŒ``seen``”h]”j )�”}”(hjá h]”hŒseen”…”�”}”(hjã h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjß ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M<hjÛ ubj. )�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jö h´M<hj÷ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjÛ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jö h´M<hjŸ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjƒ ubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hj!h]”hŒ Description”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M>hjƒ ubhÌ)�”}”(hŒ3ASSERT_GE(expected, measured): expected >= measured”h]”hŒ3ASSERT_GE(expected, measured): expected >= measured”…”�”}”(hj2!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M:hjƒ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hj,h²hh³Nh´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒASSERT_NULL (C macro)”Œ c.ASSERT_NULL”hNt”auh1jb hj,h²hh³Nh´Nubju )�”}”(hhh]”(jz )�”}”(hŒ ASSERT_NULL”h]”j€ )�”}”(hŒ ASSERT_NULL”h]”j† )�”}”(hŒ ASSERT_NULL”h]”jŒ )�”}”(hj[!h]”hŒ ASSERT_NULL”…”�”}”(hje!h²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hja!ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hj]!h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MDubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hjY!h²hh³jx!h´MDubah}”(h]”jT!ah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³jx!h´MDhjV!h²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hjV!h²hh³jx!h´MDubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË j‘!jÌ j‘!jÍ ‰jÎ ‰jÏ ‰uh1jt h²hhj,h³Nh´NubhÌ)�”}”(hŒ``ASSERT_NULL (seen)``”h]”j )�”}”(hj—!h]”hŒASSERT_NULL (seen)”…”�”}”(hj™!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj•!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MFhj,h²hubjé )�”}”(hŒc**Parameters** ``seen`` measured value **Description** ASSERT_NULL(measured): NULL == measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hj³!h]”hŒ Parameters”…”�”}”(hjµ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj±!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MHhj­!ubj )�”}”(hhh]”j )�”}”(hŒ``seen`` measured value ”h]”(j )�”}”(hŒ``seen``”h]”j )�”}”(hjÒ!h]”hŒseen”…”�”}”(hjÔ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÐ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MFhjÌ!ubj. )�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjë!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jç!h´MFhjè!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjÌ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jç!h´MFhjÉ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj­!ubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hj "h]”hŒ Description”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj "ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MHhj­!ubhÌ)�”}”(hŒ'ASSERT_NULL(measured): NULL == measured”h]”hŒ'ASSERT_NULL(measured): NULL == measured”…”�”}”(hj#"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MEhj­!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hj,h²hh³Nh´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒASSERT_TRUE (C macro)”Œ c.ASSERT_TRUE”hNt”auh1jb hj,h²hh³Nh´Nubju )�”}”(hhh]”(jz )�”}”(hŒ ASSERT_TRUE”h]”j€ )�”}”(hŒ ASSERT_TRUE”h]”j† )�”}”(hŒ ASSERT_TRUE”h]”jŒ )�”}”(hjL"h]”hŒ ASSERT_TRUE”…”�”}”(hjV"h²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hjR"ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hjN"h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MNubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hjJ"h²hh³ji"h´MNubah}”(h]”jE"ah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³ji"h´MNhjG"h²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hjG"h²hh³ji"h´MNubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË j‚"jÌ j‚"jÍ ‰jÎ ‰jÏ ‰uh1jt h²hhj,h³Nh´NubhÌ)�”}”(hŒ``ASSERT_TRUE (seen)``”h]”j )�”}”(hjˆ"h]”hŒASSERT_TRUE (seen)”…”�”}”(hjŠ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj†"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MPhj,h²hubjé )�”}”(hŒ`**Parameters** ``seen`` measured value **Description** ASSERT_TRUE(measured): measured != 0”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hj¤"h]”hŒ Parameters”…”�”}”(hj¦"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj¢"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MRhjž"ubj )�”}”(hhh]”j )�”}”(hŒ``seen`` measured value ”h]”(j )�”}”(hŒ``seen``”h]”j )�”}”(hjÃ"h]”hŒseen”…”�”}”(hjÅ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÁ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MPhj½"ubj. )�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjÜ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jØ"h´MPhjÙ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hj½"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jØ"h´MPhjº"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjž"ubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hjþ"h]”hŒ Description”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjü"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MRhjž"ubhÌ)�”}”(hŒ$ASSERT_TRUE(measured): measured != 0”h]”hŒ$ASSERT_TRUE(measured): measured != 0”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MOhjž"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hj,h²hh³Nh´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒASSERT_FALSE (C macro)”Œc.ASSERT_FALSE”hNt”auh1jb hj,h²hh³Nh´Nubju )�”}”(hhh]”(jz )�”}”(hŒ ASSERT_FALSE”h]”j€ )�”}”(hŒ ASSERT_FALSE”h]”j† )�”}”(hŒ ASSERT_FALSE”h]”jŒ )�”}”(hj=#h]”hŒ ASSERT_FALSE”…”�”}”(hjG#h²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hjC#ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hj?#h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MXubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hj;#h²hh³jZ#h´MXubah}”(h]”j6#ah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³jZ#h´MXhj8#h²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hj8#h²hh³jZ#h´MXubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË js#jÌ js#jÍ ‰jÎ ‰jÏ ‰uh1jt h²hhj,h³Nh´NubhÌ)�”}”(hŒ``ASSERT_FALSE (seen)``”h]”j )�”}”(hjy#h]”hŒASSERT_FALSE (seen)”…”�”}”(hj{#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjw#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MZhj,h²hubjé )�”}”(hŒa**Parameters** ``seen`` measured value **Description** ASSERT_FALSE(measured): measured == 0”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hj•#h]”hŒ Parameters”…”�”}”(hj—#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj“#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M\hj�#ubj )�”}”(hhh]”j )�”}”(hŒ``seen`` measured value ”h]”(j )�”}”(hŒ``seen``”h]”j )�”}”(hj´#h]”hŒseen”…”�”}”(hj¶#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj²#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MZhj®#ubj. )�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjÍ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÉ#h´MZhjÊ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hj®#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jÉ#h´MZhj«#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj�#ubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hjï#h]”hŒ Description”…”�”}”(hjñ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjí#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M\hj�#ubhÌ)�”}”(hŒ%ASSERT_FALSE(measured): measured == 0”h]”hŒ%ASSERT_FALSE(measured): measured == 0”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MYhj�#ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hj,h²hh³Nh´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒASSERT_STREQ (C macro)”Œc.ASSERT_STREQ”hNt”auh1jb hj,h²hh³Nh´Nubju )�”}”(hhh]”(jz )�”}”(hŒ ASSERT_STREQ”h]”j€ )�”}”(hŒ ASSERT_STREQ”h]”j† )�”}”(hŒ ASSERT_STREQ”h]”jŒ )�”}”(hj.$h]”hŒ ASSERT_STREQ”…”�”}”(hj8$h²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hj4$ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hj0$h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mbubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hj,$h²hh³jK$h´Mbubah}”(h]”j'$ah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³jK$h´Mbhj)$h²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hj)$h²hh³jK$h´Mbubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË jd$jÌ jd$jÍ ‰jÎ ‰jÏ ‰uh1jt h²hhj,h³Nh´NubhÌ)�”}”(hŒ!``ASSERT_STREQ (expected, seen)``”h]”j )�”}”(hjj$h]”hŒASSERT_STREQ (expected, seen)”…”�”}”(hjl$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjh$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mdhj,h²hubjé )�”}”(hŒ˜**Parameters** ``expected`` expected value ``seen`` measured value **Description** ASSERT_STREQ(expected, measured): !strcmp(expected, measured)”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hj†$h]”hŒ Parameters”…”�”}”(hjˆ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj„$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mfhj€$ubj )�”}”(hhh]”(j )�”}”(hŒ``expected`` expected value ”h]”(j )�”}”(hŒ ``expected``”h]”j )�”}”(hj¥$h]”hŒexpected”…”�”}”(hj§$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj£$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MdhjŸ$ubj. )�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hj¾$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jº$h´Mdhj»$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjŸ$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jº$h´Mdhjœ$ubj )�”}”(hŒ``seen`` measured value ”h]”(j )�”}”(hŒ``seen``”h]”j )�”}”(hjÞ$h]”hŒseen”…”�”}”(hjà$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÜ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MehjØ$ubj. )�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hj÷$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jó$h´Mehjô$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjØ$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jó$h´Mehjœ$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj€$ubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hj%h]”hŒ Description”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mghj€$ubhÌ)�”}”(hŒ=ASSERT_STREQ(expected, measured): !strcmp(expected, measured)”h]”hŒ=ASSERT_STREQ(expected, measured): !strcmp(expected, measured)”…”�”}”(hj/%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mchj€$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hj,h²hh³Nh´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒASSERT_STRNE (C macro)”Œc.ASSERT_STRNE”hNt”auh1jb hj,h²hh³Nh´Nubju )�”}”(hhh]”(jz )�”}”(hŒ ASSERT_STRNE”h]”j€ )�”}”(hŒ ASSERT_STRNE”h]”j† )�”}”(hŒ ASSERT_STRNE”h]”jŒ )�”}”(hjX%h]”hŒ ASSERT_STRNE”…”�”}”(hjb%h²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hj^%ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hjZ%h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mmubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hjV%h²hh³ju%h´Mmubah}”(h]”jQ%ah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³ju%h´MmhjS%h²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hjS%h²hh³ju%h´Mmubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË jŽ%jÌ jŽ%jÍ ‰jÎ ‰jÏ ‰uh1jt h²hhj,h³Nh´NubhÌ)�”}”(hŒ!``ASSERT_STRNE (expected, seen)``”h]”j )�”}”(hj”%h]”hŒASSERT_STRNE (expected, seen)”…”�”}”(hj–%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj’%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mohj,h²hubjé )�”}”(hŒ—**Parameters** ``expected`` expected value ``seen`` measured value **Description** ASSERT_STRNE(expected, measured): strcmp(expected, measured)”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hj°%h]”hŒ Parameters”…”�”}”(hj²%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj®%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mqhjª%ubj )�”}”(hhh]”(j )�”}”(hŒ``expected`` expected value ”h]”(j )�”}”(hŒ ``expected``”h]”j )�”}”(hjÏ%h]”hŒexpected”…”�”}”(hjÑ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÍ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MohjÉ%ubj. )�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hjè%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jä%h´Mohjå%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjÉ%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jä%h´MohjÆ%ubj )�”}”(hŒ``seen`` measured value ”h]”(j )�”}”(hŒ``seen``”h]”j )�”}”(hj&h]”hŒseen”…”�”}”(hj &h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mphj&ubj. )�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hj!&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j&h´Mphj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j&h´MphjÆ%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjª%ubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hjC&h]”hŒ Description”…”�”}”(hjE&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjA&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mrhjª%ubhÌ)�”}”(hŒ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj:*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M›hj,h²hubjé )�”}”(hŒŽ**Parameters** ``expected`` expected value ``seen`` measured value **Description** EXPECT_LE(expected, measured): expected <= measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hjX*h]”hŒ Parameters”…”�”}”(hjZ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjV*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M�hjR*ubj )�”}”(hhh]”(j )�”}”(hŒ``expected`` expected value ”h]”(j )�”}”(hŒ ``expected``”h]”j )�”}”(hjw*h]”hŒexpected”…”�”}”(hjy*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhju*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M›hjq*ubj. )�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hj�*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jŒ*h´M›hj�*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjq*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jŒ*h´M›hjn*ubj )�”}”(hŒ``seen`` measured value ”h]”(j )�”}”(hŒ``seen``”h]”j )�”}”(hj°*h]”hŒseen”…”�”}”(hj²*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj®*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mœhjª*ubj. )�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjÉ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÅ*h´MœhjÆ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjª*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jÅ*h´Mœhjn*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjR*ubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hjë*h]”hŒ Description”…”�”}”(hjí*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjé*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MžhjR*ubhÌ)�”}”(hŒ3EXPECT_LE(expected, measured): expected <= measured”h]”hŒ3EXPECT_LE(expected, measured): expected <= measured”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MšhjR*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hj,h²hh³Nh´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒEXPECT_GT (C macro)”Œ c.EXPECT_GT”hNt”auh1jb hj,h²hh³Nh´Nubju )�”}”(hhh]”(jz )�”}”(hŒ EXPECT_GT”h]”j€ )�”}”(hŒ EXPECT_GT”h]”j† )�”}”(hŒ EXPECT_GT”h]”jŒ )�”}”(hj*+h]”hŒ EXPECT_GT”…”�”}”(hj4+h²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hj0+ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hj,+h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M¤ubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hj(+h²hh³jG+h´M¤ubah}”(h]”j#+ah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³jG+h´M¤hj%+h²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hj%+h²hh³jG+h´M¤ubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË j`+jÌ j`+jÍ ‰jÎ ‰jÏ ‰uh1jt h²hhj,h³Nh´NubhÌ)�”}”(hŒ``EXPECT_GT (expected, seen)``”h]”j )�”}”(hjf+h]”hŒEXPECT_GT (expected, seen)”…”�”}”(hjh+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjd+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M¦hj,h²hubjé )�”}”(hŒ�**Parameters** ``expected`` expected value ``seen`` measured value **Description** EXPECT_GT(expected, measured): expected > measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hj‚+h]”hŒ Parameters”…”�”}”(hj„+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj€+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M¨hj|+ubj )�”}”(hhh]”(j )�”}”(hŒ``expected`` expected value ”h]”(j )�”}”(hŒ ``expected``”h]”j )�”}”(hj¡+h]”hŒexpected”…”�”}”(hj£+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjŸ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M¦hj›+ubj. )�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hjº+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¶+h´M¦hj·+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hj›+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j¶+h´M¦hj˜+ubj )�”}”(hŒ``seen`` measured value ”h]”(j )�”}”(hŒ``seen``”h]”j )�”}”(hjÚ+h]”hŒseen”…”�”}”(hjÜ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjØ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M§hjÔ+ubj. )�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjó+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jï+h´M§hjð+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjÔ+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jï+h´M§hj˜+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj|+ubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hj,h]”hŒ Description”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M©hj|+ubhÌ)�”}”(hŒ2EXPECT_GT(expected, measured): expected > measured”h]”hŒ2EXPECT_GT(expected, measured): expected > measured”…”�”}”(hj+,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M¥hj|+ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hj,h²hh³Nh´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒEXPECT_GE (C macro)”Œ c.EXPECT_GE”hNt”auh1jb hj,h²hh³Nh´Nubju )�”}”(hhh]”(jz )�”}”(hŒ EXPECT_GE”h]”j€ )�”}”(hŒ EXPECT_GE”h]”j† )�”}”(hŒ EXPECT_GE”h]”jŒ )�”}”(hjT,h]”hŒ EXPECT_GE”…”�”}”(hj^,h²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hjZ,ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hjV,h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M¯ubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hjR,h²hh³jq,h´M¯ubah}”(h]”jM,ah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³jq,h´M¯hjO,h²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hjO,h²hh³jq,h´M¯ubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË jŠ,jÌ jŠ,jÍ ‰jÎ ‰jÏ ‰uh1jt h²hhj,h³Nh´NubhÌ)�”}”(hŒ``EXPECT_GE (expected, seen)``”h]”j )�”}”(hj�,h]”hŒEXPECT_GE (expected, seen)”…”�”}”(hj’,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjŽ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M±hj,h²hubjé )�”}”(hŒŽ**Parameters** ``expected`` expected value ``seen`` measured value **Description** EXPECT_GE(expected, measured): expected >= measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hj¬,h]”hŒ Parameters”…”�”}”(hj®,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjª,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M³hj¦,ubj )�”}”(hhh]”(j )�”}”(hŒ``expected`` expected value ”h]”(j )�”}”(hŒ ``expected``”h]”j )�”}”(hjË,h]”hŒexpected”…”�”}”(hjÍ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÉ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M±hjÅ,ubj. )�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hjä,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jà,h´M±hjá,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjÅ,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jà,h´M±hjÂ,ubj )�”}”(hŒ``seen`` measured value ”h]”(j )�”}”(hŒ``seen``”h]”j )�”}”(hj-h]”hŒseen”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M²hjþ,ubj. )�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j-h´M²hj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjþ,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j-h´M²hjÂ,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¦,ubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hj?-h]”hŒ Description”…”�”}”(hjA-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj=-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M´hj¦,ubhÌ)�”}”(hŒ3EXPECT_GE(expected, measured): expected >= measured”h]”hŒ3EXPECT_GE(expected, measured): expected >= measured”…”�”}”(hjU-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M°hj¦,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hj,h²hh³Nh´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒEXPECT_NULL (C macro)”Œ c.EXPECT_NULL”hNt”auh1jb hj,h²hh³Nh´Nubju )�”}”(hhh]”(jz )�”}”(hŒ EXPECT_NULL”h]”j€ )�”}”(hŒ EXPECT_NULL”h]”j† )�”}”(hŒ EXPECT_NULL”h]”jŒ )�”}”(hj~-h]”hŒ EXPECT_NULL”…”�”}”(hjˆ-h²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hj„-ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hj€-h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mºubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hj|-h²hh³j›-h´Mºubah}”(h]”jw-ah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³j›-h´Mºhjy-h²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hjy-h²hh³j›-h´Mºubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË j´-jÌ j´-jÍ ‰jÎ ‰jÏ ‰uh1jt h²hhj,h³Nh´NubhÌ)�”}”(hŒ``EXPECT_NULL (seen)``”h]”j )�”}”(hjº-h]”hŒEXPECT_NULL (seen)”…”�”}”(hj¼-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj¸-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M¼hj,h²hubjé )�”}”(hŒc**Parameters** ``seen`` measured value **Description** EXPECT_NULL(measured): NULL == measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hjÖ-h]”hŒ Parameters”…”�”}”(hjØ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjÔ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M¾hjÐ-ubj )�”}”(hhh]”j )�”}”(hŒ``seen`` measured value ”h]”(j )�”}”(hŒ``seen``”h]”j )�”}”(hjõ-h]”hŒseen”…”�”}”(hj÷-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjó-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M¼hjï-ubj. )�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j .h´M¼hj .ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjï-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j .h´M¼hjì-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÐ-ubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hj0.h]”hŒ Description”…”�”}”(hj2.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj..ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M¾hjÐ-ubhÌ)�”}”(hŒ'EXPECT_NULL(measured): NULL == measured”h]”hŒ'EXPECT_NULL(measured): NULL == measured”…”�”}”(hjF.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´M»hjÐ-ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hj,h²hh³Nh´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒEXPECT_TRUE (C macro)”Œ c.EXPECT_TRUE”hNt”auh1jb hj,h²hh³Nh´Nubju )�”}”(hhh]”(jz )�”}”(hŒ EXPECT_TRUE”h]”j€ )�”}”(hŒ EXPECT_TRUE”h]”j† )�”}”(hŒ EXPECT_TRUE”h]”jŒ )�”}”(hjo.h]”hŒ EXPECT_TRUE”…”�”}”(hjy.h²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hju.ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hjq.h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MÄubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hjm.h²hh³jŒ.h´MÄubah}”(h]”jh.ah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³jŒ.h´MÄhjj.h²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hjj.h²hh³jŒ.h´MÄubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË j¥.jÌ j¥.jÍ ‰jÎ ‰jÏ ‰uh1jt h²hhj,h³Nh´NubhÌ)�”}”(hŒ``EXPECT_TRUE (seen)``”h]”j )�”}”(hj«.h]”hŒEXPECT_TRUE (seen)”…”�”}”(hj­.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj©.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MÆhj,h²hubjé )�”}”(hŒ`**Parameters** ``seen`` measured value **Description** EXPECT_TRUE(measured): 0 != measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hjÇ.h]”hŒ Parameters”…”�”}”(hjÉ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjÅ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MÈhjÁ.ubj )�”}”(hhh]”j )�”}”(hŒ``seen`` measured value ”h]”(j )�”}”(hŒ``seen``”h]”j )�”}”(hjæ.h]”hŒseen”…”�”}”(hjè.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjä.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MÆhjà.ubj. )�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjÿ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jû.h´MÆhjü.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjà.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jû.h´MÆhjÝ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÁ.ubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hj!/h]”hŒ Description”…”�”}”(hj#/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MÈhjÁ.ubhÌ)�”}”(hŒ$EXPECT_TRUE(measured): 0 != measured”h]”hŒ$EXPECT_TRUE(measured): 0 != measured”…”�”}”(hj7/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MÅhjÁ.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hj,h²hh³Nh´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒEXPECT_FALSE (C macro)”Œc.EXPECT_FALSE”hNt”auh1jb hj,h²hh³Nh´Nubju )�”}”(hhh]”(jz )�”}”(hŒ EXPECT_FALSE”h]”j€ )�”}”(hŒ EXPECT_FALSE”h]”j† )�”}”(hŒ EXPECT_FALSE”h]”jŒ )�”}”(hj`/h]”hŒ EXPECT_FALSE”…”�”}”(hjj/h²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hjf/ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hjb/h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MÎubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hj^/h²hh³j}/h´MÎubah}”(h]”jY/ah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³j}/h´MÎhj[/h²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hj[/h²hh³j}/h´MÎubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË j–/jÌ j–/jÍ ‰jÎ ‰jÏ ‰uh1jt h²hhj,h³Nh´NubhÌ)�”}”(hŒ``EXPECT_FALSE (seen)``”h]”j )�”}”(hjœ/h]”hŒEXPECT_FALSE (seen)”…”�”}”(hjž/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjš/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MÐhj,h²hubjé )�”}”(hŒa**Parameters** ``seen`` measured value **Description** EXPECT_FALSE(measured): 0 == measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hj¸/h]”hŒ Parameters”…”�”}”(hjº/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj¶/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MÒhj²/ubj )�”}”(hhh]”j )�”}”(hŒ``seen`` measured value ”h]”(j )�”}”(hŒ``seen``”h]”j )�”}”(hj×/h]”hŒseen”…”�”}”(hjÙ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÕ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MÐhjÑ/ubj. )�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjð/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jì/h´MÐhjí/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjÑ/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jì/h´MÐhjÎ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj²/ubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hj0h]”hŒ Description”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MÒhj²/ubhÌ)�”}”(hŒ%EXPECT_FALSE(measured): 0 == measured”h]”hŒ%EXPECT_FALSE(measured): 0 == measured”…”�”}”(hj(0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MÏhj²/ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hj,h²hh³Nh´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒEXPECT_STREQ (C macro)”Œc.EXPECT_STREQ”hNt”auh1jb hj,h²hh³Nh´Nubju )�”}”(hhh]”(jz )�”}”(hŒ EXPECT_STREQ”h]”j€ )�”}”(hŒ EXPECT_STREQ”h]”j† )�”}”(hŒ EXPECT_STREQ”h]”jŒ )�”}”(hjQ0h]”hŒ EXPECT_STREQ”…”�”}”(hj[0h²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hjW0ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hjS0h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MØubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hjO0h²hh³jn0h´MØubah}”(h]”jJ0ah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³jn0h´MØhjL0h²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hjL0h²hh³jn0h´MØubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË j‡0jÌ j‡0jÍ ‰jÎ ‰jÏ ‰uh1jt h²hhj,h³Nh´NubhÌ)�”}”(hŒ!``EXPECT_STREQ (expected, seen)``”h]”j )�”}”(hj�0h]”hŒEXPECT_STREQ (expected, seen)”…”�”}”(hj�0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj‹0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MÚhj,h²hubjé )�”}”(hŒ˜**Parameters** ``expected`` expected value ``seen`` measured value **Description** EXPECT_STREQ(expected, measured): !strcmp(expected, measured)”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hj©0h]”hŒ Parameters”…”�”}”(hj«0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj§0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MÜhj£0ubj )�”}”(hhh]”(j )�”}”(hŒ``expected`` expected value ”h]”(j )�”}”(hŒ ``expected``”h]”j )�”}”(hjÈ0h]”hŒexpected”…”�”}”(hjÊ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÆ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MÚhjÂ0ubj. )�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hjá0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÝ0h´MÚhjÞ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjÂ0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jÝ0h´MÚhj¿0ubj )�”}”(hŒ``seen`` measured value ”h]”(j )�”}”(hŒ``seen``”h]”j )�”}”(hj1h]”hŒseen”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÿ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MÛhjû0ubj. )�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j1h´MÛhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjû0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j1h´MÛhj¿0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj£0ubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hj<1h]”hŒ Description”…”�”}”(hj>1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hj:1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MÝhj£0ubhÌ)�”}”(hŒ=EXPECT_STREQ(expected, measured): !strcmp(expected, measured)”h]”hŒ=EXPECT_STREQ(expected, measured): !strcmp(expected, measured)”…”�”}”(hjR1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MÙhj£0ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jè hj,h²hh³Nh´Nubjc )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jo ŒEXPECT_STRNE (C macro)”Œc.EXPECT_STRNE”hNt”auh1jb hj,h²hh³Nh´Nubju )�”}”(hhh]”(jz )�”}”(hŒ EXPECT_STRNE”h]”j€ )�”}”(hŒ EXPECT_STRNE”h]”j† )�”}”(hŒ EXPECT_STRNE”h]”jŒ )�”}”(hj{1h]”hŒ EXPECT_STRNE”…”�”}”(hj…1h²hh³Nh´Nubah}”(h]”h ]”j— ah"]”h$]”h&]”uh1j‹ hj�1ubah}”(h]”h ]”(jž jŸ eh"]”h$]”h&]”j°j±uh1j… hj}1h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mãubah}”(h]”h ]”h"]”h$]”h&]”j°j±jª ˆuh1j j« j¬ hjy1h²hh³j˜1h´Mãubah}”(h]”jt1ah ]”(j° j± eh"]”h$]”h&]”jµ ˆj¶ )j· huh1jy h³j˜1h´Mãhjv1h²hubj¹ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¸ hjv1h²hh³j˜1h´Mãubeh}”(h]”h ]”(j­ Œmacro”eh"]”h$]”h&]”jÊ j­ jË j±1jÌ j±1jÍ ‰jÎ ‰jÏ ‰uh1jt h²hhj,h³Nh´NubhÌ)�”}”(hŒ!``EXPECT_STRNE (expected, seen)``”h]”j )�”}”(hj·1h]”hŒEXPECT_STRNE (expected, seen)”…”�”}”(hj¹1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjµ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Måhj,h²hubjé )�”}”(hŒ—**Parameters** ``expected`` expected value ``seen`` measured value **Description** EXPECT_STRNE(expected, measured): strcmp(expected, measured)”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jó )�”}”(hjÓ1h]”hŒ Parameters”…”�”}”(hjÕ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjÑ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MçhjÍ1ubj )�”}”(hhh]”(j )�”}”(hŒ``expected`` expected value ”h]”(j )�”}”(hŒ ``expected``”h]”j )�”}”(hjò1h]”hŒexpected”…”�”}”(hjô1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjð1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Måhjì1ubj. )�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hj 2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j2h´Måhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjì1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j2h´Måhjé1ubj )�”}”(hŒ``seen`` measured value ”h]”(j )�”}”(hŒ``seen``”h]”j )�”}”(hj+2h]”hŒseen”…”�”}”(hj-2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj)2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´Mæhj%2ubj. )�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjD2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j@2h´MæhjA2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hj%2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j@2h´Mæhjé1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÍ1ubhÌ)�”}”(hŒ**Description**”h]”jó )�”}”(hjf2h]”hŒ Description”…”�”}”(hjh2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jò hjd2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:449: ./tools/testing/selftests/kselftest_harness.h”h´MèhjÍ1ubhÌ)�”}”(hŒj;j9j6j1j.jójðj¿ j¼ jä j(j} jz j´ j± jÝ jÚ jž2jjN jK j)j&j—2j”2uŒ nametypes”}”(j¦2‰j~‰j{‰j‚‰jþ‰j]‰jô‰j׉j>‰j9‰j1ˆjó‰j¿ ‰jä ‰j} ‰j´ ‰jÝ ‰jž2‰jN ‰j)‰j—2‰uh}”(j£2h·j{j3jxj�jj~jûj†jZjjñj`jÔj÷j;jÚj6jAj.j(jðj<j¼ jöj(j jz j” j± j€ jÚ j· jjç jK j( j&jQ jq j{ jä jé j jjVj[j„j‰j°jµj jjKjPjwj|jÜjájqjvj”2j,jXj]j‚j‡j¬j±jÖjÛjjj* j/ jT!jY!jE"jJ"j6#j;#j'$j,$jQ%jV%j{&j€&j¥'jª'jÏ(jÔ(jù)jþ)j#+j(+jM,jR,jw-j|-jh.jm.jY/j^/jJ0jO0jt1jy1uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.