// Copyright (c) 2015 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 "gpu/command_buffer/service/context_state.h"

#include <stddef.h>

#include "testing/gtest/include/gtest/gtest.h"

namespace gpu {
namespace gles2 {

TEST(ContextStateVec4Test, DefaultValues) {
  Vec4 v;
  EXPECT_EQ(SHADER_VARIABLE_FLOAT, v.type());
  GLfloat f[4];
  v.GetValues(f);
  EXPECT_EQ(0.f, f[0]);
  EXPECT_EQ(0.f, f[1]);
  EXPECT_EQ(0.f, f[2]);
  EXPECT_EQ(1.f, f[3]);
}

TEST(ContextStateVec4Test, SetGetFloatValues) {
  Vec4 v;

  const GLfloat kFloatValues[4] = { 2.f, 3.f, 4.f, 5.f };
  v.SetValues(kFloatValues);
  EXPECT_EQ(SHADER_VARIABLE_FLOAT, v.type());
  GLfloat fv[4];
  v.GetValues(fv);
  for (size_t ii = 0; ii < 4; ++ii) {
    EXPECT_EQ(kFloatValues[ii], fv[ii]);
  }
}

TEST(ContextStateVec4Test, SetGetIntValues) {
  Vec4 v;

  const GLint kIntValues[4] = { 2, 3, -4, 5 };
  v.SetValues(kIntValues);
  EXPECT_EQ(SHADER_VARIABLE_INT, v.type());
  GLint iv[4];
  v.GetValues(iv);
  for (size_t ii = 0; ii < 4; ++ii) {
    EXPECT_EQ(kIntValues[ii], iv[ii]);
  }
}

TEST(ContextStateVec4Test, SetGetUIntValues) {
  Vec4 v;

  const GLuint kUIntValues[4] = { 2, 3, 4, 5 };
  v.SetValues(kUIntValues);
  EXPECT_EQ(SHADER_VARIABLE_UINT, v.type());
  GLuint uiv[4];
  v.GetValues(uiv);
  for (size_t ii = 0; ii < 4; ++ii) {
    EXPECT_EQ(kUIntValues[ii], uiv[ii]);
  }
}

TEST(ContextStateVec4Test, Equal) {
  Vec4 v1, v2;

  const GLint kIntValues[4] = { 2, 3, 4, 5 };
  const GLuint kUIntValues[4] = { 2, 3, 4, 5 };

  v1.SetValues(kIntValues);
  v2.SetValues(kUIntValues);
  EXPECT_FALSE(v1.Equal(v2));
  EXPECT_FALSE(v2.Equal(v1));

  v2.SetValues(kIntValues);
  EXPECT_TRUE(v1.Equal(v2));
  EXPECT_TRUE(v2.Equal(v1));

  const GLint kIntValues2[4] = { 2, 3, 4, 6 };
  v2.SetValues(kIntValues2);
  EXPECT_FALSE(v1.Equal(v2));
  EXPECT_FALSE(v2.Equal(v1));
}

}  // namespace gles2
}  // namespace gpu


