blob: 9a2d39dfd1065a9a8b491dea3a26d162e098b502 [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright (C) 2019, Google Inc.
*
* threads.cpp - Threads test
*/
#include <chrono>
#include <iostream>
#include <thread>
#include "thread.h"
#include "test.h"
using namespace std;
using namespace libcamera;
class InstrumentedThread : public Thread
{
public:
InstrumentedThread(unsigned int iterations)
: iterations_(iterations)
{
}
protected:
void run()
{
for (unsigned int i = 0; i < iterations_; ++i) {
this_thread::sleep_for(chrono::milliseconds(50));
}
}
private:
unsigned int iterations_;
};
class ThreadTest : public Test
{
protected:
int init()
{
return 0;
}
int run()
{
/* Test Thread() retrieval for the main thread. */
Thread *thread = Thread::current();
if (!thread) {
cout << "Thread::current() failed to main thread"
<< endl;
return TestFail;
}
if (!thread->isRunning()) {
cout << "Main thread is not running" << endl;
return TestFail;
}
/* Test starting the main thread, the test shall not crash. */
thread->start();
/* Test the running state of a custom thread. */
thread = new Thread();
thread->start();
if (!thread->isRunning()) {
cout << "Thread is not running after being started"
<< endl;
return TestFail;
}
thread->exit(0);
thread->wait();
if (thread->isRunning()) {
cout << "Thread is still running after finishing"
<< endl;
return TestFail;
}
delete thread;
return TestPass;
}
void cleanup()
{
}
};
TEST_REGISTER(ThreadTest)