// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

#include "vm/thread_barrier.h"
#include "platform/assert.h"
#include "vm/random.h"
#include "vm/thread_pool.h"
#include "vm/unit_test.h"

namespace dart {

class FuzzTask : public ThreadPool::Task {
 public:
  FuzzTask(intptr_t num_rounds, ThreadBarrier* barrier, uint64_t seed)
      : num_rounds_(num_rounds), barrier_(barrier), rng_(seed) {}

  virtual void Run() {
    for (intptr_t i = 0; i < num_rounds_; ++i) {
      RandomSleep();
      barrier_->Sync();
    }
    barrier_->Release();
  }

 private:
  void RandomSleep() {
    int64_t ms = rng_.NextUInt32() % 4;
    if (ms > 0) {
      OS::Sleep(ms);
    }
  }

  const intptr_t num_rounds_;
  ThreadBarrier* barrier_;
  Random rng_;
};

VM_UNIT_TEST_CASE(ThreadBarrier) {
  static const intptr_t kNumTasks = 5;
  static const intptr_t kNumRounds = 500;

  ThreadBarrier* barrier = new ThreadBarrier(kNumTasks + 1, kNumTasks + 1);
  for (intptr_t i = 0; i < kNumTasks; ++i) {
    Dart::thread_pool()->Run<FuzzTask>(kNumRounds, barrier, i + 1);
  }
  for (intptr_t i = 0; i < kNumRounds; ++i) {
    barrier->Sync();
  }
  barrier->Release();
}

}  // namespace dart
