Index: test/cctest/test-libplatform-task-queue.cc |
diff --git a/test/cctest/test-cpu.cc b/test/cctest/test-libplatform-task-queue.cc |
similarity index 58% |
copy from test/cctest/test-cpu.cc |
copy to test/cctest/test-libplatform-task-queue.cc |
index 06966c68c86296e510edb8899f4d7deb0343f108..e9fafe2cecde1e6f5e04890d3f4c85cf443e68ba 100644 |
--- a/test/cctest/test-cpu.cc |
+++ b/test/cctest/test-libplatform-task-queue.cc |
@@ -28,28 +28,68 @@ |
#include "v8.h" |
#include "cctest.h" |
-#include "cpu.h" |
+#include "libplatform/task-queue.h" |
+#include "test-libplatform.h" |
using namespace v8::internal; |
-TEST(FeatureImplications) { |
- // Test for features implied by other features. |
- CPU cpu; |
+TEST(TaskQueueBasic) { |
+ int task_counter = 0; |
- // ia32 and x64 features |
- CHECK(!cpu.has_sse() || cpu.has_mmx()); |
- CHECK(!cpu.has_sse2() || cpu.has_sse()); |
- CHECK(!cpu.has_sse3() || cpu.has_sse2()); |
- CHECK(!cpu.has_ssse3() || cpu.has_sse3()); |
- CHECK(!cpu.has_sse41() || cpu.has_sse3()); |
- CHECK(!cpu.has_sse42() || cpu.has_sse41()); |
+ TaskQueue queue; |
- // arm features |
- CHECK(!cpu.has_vfp3_d32() || cpu.has_vfp3()); |
+ TestTask* task = new TestTask(&task_counter); |
+ queue.Append(task); |
+ CHECK_EQ(1, task_counter); |
+ CHECK_EQ(task, queue.GetNext()); |
+ delete task; |
+ CHECK_EQ(0, task_counter); |
+ |
+ queue.Terminate(); |
+ CHECK_EQ(NULL, queue.GetNext()); |
} |
-TEST(NumberOfProcessorsOnline) { |
- CHECK_GT(CPU::NumberOfProcessorsOnline(), 0); |
+class ReadQueueTask : public TestTask { |
+ public: |
+ ReadQueueTask(int* task_counter, TaskQueue* queue) |
+ : TestTask(task_counter, true), queue_(queue) {} |
+ virtual ~ReadQueueTask() {} |
+ |
+ virtual void Run() V8_OVERRIDE { |
+ TestTask::Run(); |
+ CHECK_EQ(NULL, queue_->GetNext()); |
+ } |
+ |
+ private: |
+ TaskQueue* queue_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ReadQueueTask); |
+}; |
+ |
+ |
+TEST(TaskQueueTerminateMultipleReaders) { |
+ TaskQueue queue; |
+ int task_counter = 0; |
+ ReadQueueTask* read1 = new ReadQueueTask(&task_counter, &queue); |
+ ReadQueueTask* read2 = new ReadQueueTask(&task_counter, &queue); |
+ |
+ TestThread thread1(read1); |
+ TestThread thread2(read2); |
+ |
+ thread1.Start(); |
+ thread2.Start(); |
+ |
+ CHECK_EQ(2, task_counter); |
+ |
+ thread1.Signal(); |
+ thread2.Signal(); |
+ |
+ queue.Terminate(); |
+ |
+ thread1.Join(); |
+ thread2.Join(); |
+ |
+ CHECK_EQ(0, task_counter); |
} |