/*
 * Copyright 2022 Rive
 */
#ifndef _RIVE_RANDOM_HPP_
#define _RIVE_RANDOM_HPP_

#include <vector>
#include <cstdlib>

namespace rive
{

class RandomProvider
{
#ifdef TESTING
private:
  static int m_randomCallsCount;
  static std::vector<float> m_randomResults;

public:
  static void addRandomValue(float value) { m_randomResults.push_back(value); }
  static void clearRandoms()
  {
    m_randomCallsCount = 0;
    m_randomResults.clear();
  }
  static float generateRandomFloat()
  {
    m_randomCallsCount++;
    if (m_randomResults.size() > 0)
    {
      auto newRandom = m_randomResults[0];
      m_randomResults.erase(m_randomResults.begin());
      return newRandom;
    }
    return 0;
  }
  static int totalCalls() { return m_randomCallsCount; };
#else
public:
  static float generateRandomFloat() { return (float)rand() / float(RAND_MAX); }
#endif
};

} // namespace rive

#endif
