// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "components/variations/caching_permuted_entropy_provider.h"

#include <string>

#include "base/basictypes.h"
#include "base/prefs/testing_pref_service.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace metrics {

// Size of the low entropy source to use for the permuted entropy provider
// in tests.
const size_t kMaxLowEntropySize = 8000;

// Field trial names used in unit tests.
const char* const kTestTrialNames[] = {"TestTrial", "AnotherTestTrial",
                                       "NewTabButton"};

TEST(CachingPermutedEntropyProviderTest, HasConsistentResults) {
  TestingPrefServiceSimple prefs;
  CachingPermutedEntropyProvider::RegisterPrefs(prefs.registry());
  const int kEntropyValue = 1234;

  // Check that the caching provider returns the same results as the non caching
  // one. Loop over the trial names twice, to test that caching returns the
  // expected results.
  PermutedEntropyProvider provider(kEntropyValue, kMaxLowEntropySize);
  for (size_t i = 0; i < 2 * arraysize(kTestTrialNames); ++i) {
    CachingPermutedEntropyProvider cached_provider(
        &prefs, kEntropyValue, kMaxLowEntropySize);
    const std::string trial_name =
        kTestTrialNames[i % arraysize(kTestTrialNames)];
    EXPECT_DOUBLE_EQ(provider.GetEntropyForTrial(trial_name, 0),
                     cached_provider.GetEntropyForTrial(trial_name, 0));
  }

  // Now, do the same test re-using the same caching provider.
  CachingPermutedEntropyProvider cached_provider(
      &prefs, kEntropyValue, kMaxLowEntropySize);
  for (size_t i = 0; i < 2 * arraysize(kTestTrialNames); ++i) {
    const std::string trial_name =
        kTestTrialNames[i % arraysize(kTestTrialNames)];
    EXPECT_DOUBLE_EQ(provider.GetEntropyForTrial(trial_name, 0),
                     cached_provider.GetEntropyForTrial(trial_name, 0));
  }
}

}  // namespace metrics
