| // Copyright 2023 The Pigweed Authors |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| // use this file except in compliance with the License. You may obtain a copy of |
| // the License at |
| // |
| // https://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| // License for the specific language governing permissions and limitations under |
| // the License. |
| |
| // IMPORTANT: DO NOT USE THIS HEADER FOR UNIT TESTS!!! |
| // |
| // Instead, use pw::thread::test::TestThreadContext in |
| // pw_thread/test_thread_context.h. See |
| // https://pigweed.dev/pw_thread#unit-testing-with-threads. |
| // |
| // pw_thread/non_portable_test_thread_options.h is not a facade. Code written |
| // against it is not portable. It was created for testing of pw_thread itself, |
| // so threads with different configurations can be instantiated in tests. |
| #pragma once |
| |
| #include "pw_thread/thread.h" |
| |
| namespace pw::thread::test { |
| |
| // Two test threads are used to verify the thread facade. |
| // |
| // These functions are NOT part of a facade! They are used to allocate thread |
| // options for testing pw_thread backends only. Multiple variations of these |
| // functions may be instantiated within a single toolchain for testing purposes. |
| // Do NOT use unless absolutely necessary. Instead, use the TestThreadContext |
| // facade for unit tests. |
| const Options& TestOptionsThread0(); |
| const Options& TestOptionsThread1(); |
| |
| // The proper way to ensure a thread is finished and cleaned up is to call |
| // join(). However, the pw_thread facade tests must test detached thread |
| // functionality. This backend-specific cleanup API blocks until all the test |
| // threads above have finished executing. |
| // |
| // Threads may be backed by static contexts or dynamic context heap allocations. |
| // After this function returns, the threads' static contexts are ready for reuse |
| // and/or their dynamically allocated memory has been freed. |
| // |
| // Precondition: The threads must have started to execute before calling this |
| // if cleanup is expected. |
| void WaitUntilDetachedThreadsCleanedUp(); |
| |
| } // namespace pw::thread::test |