// Copyright 2020 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "gtest/gtest.h"
#include "src/ast/type/texture_type.h"
#include "src/reader/wgsl/parser_impl.h"
#include "src/reader/wgsl/parser_impl_test_helper.h"

namespace tint {
namespace reader {
namespace wgsl {
namespace {

TEST_F(ParserImplTest, ImageStorageType_Invalid) {
  auto* p = parser("1234");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kNone);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_R8Unorm) {
  auto* p = parser("r8unorm");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kR8Unorm);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_R8Snorm) {
  auto* p = parser("r8snorm");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kR8Snorm);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_R8Uint) {
  auto* p = parser("r8uint");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kR8Uint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_R8Sint) {
  auto* p = parser("r8sint");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kR8Sint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_R16Uint) {
  auto* p = parser("r16uint");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kR16Uint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_R16Sint) {
  auto* p = parser("r16sint");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kR16Sint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_R16Float) {
  auto* p = parser("r16float");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kR16Float);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg8Unorm) {
  auto* p = parser("rg8unorm");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRg8Unorm);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg8Snorm) {
  auto* p = parser("rg8snorm");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRg8Snorm);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg8Uint) {
  auto* p = parser("rg8uint");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRg8Uint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg8Sint) {
  auto* p = parser("rg8sint");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRg8Sint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_R32Uint) {
  auto* p = parser("r32uint");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kR32Uint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_R32Sint) {
  auto* p = parser("r32sint");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kR32Sint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_R32Float) {
  auto* p = parser("r32float");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kR32Float);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg16Uint) {
  auto* p = parser("rg16uint");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRg16Uint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg16Sint) {
  auto* p = parser("rg16sint");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRg16Sint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg16Float) {
  auto* p = parser("rg16float");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRg16Float);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba8Unorm) {
  auto* p = parser("rgba8unorm");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRgba8Unorm);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba8UnormSrgb) {
  auto* p = parser("rgba8unorm_srgb");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRgba8UnormSrgb);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba8Snorm) {
  auto* p = parser("rgba8snorm");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRgba8Snorm);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba8Uint) {
  auto* p = parser("rgba8uint");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRgba8Uint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba8Sint) {
  auto* p = parser("rgba8sint");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRgba8Sint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Bgra8Unorm) {
  auto* p = parser("bgra8unorm");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kBgra8Unorm);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Bgra8UnormSrgb) {
  auto* p = parser("bgra8unorm_srgb");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kBgra8UnormSrgb);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgb10A2Unorm) {
  auto* p = parser("rgb10a2unorm");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRgb10A2Unorm);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg11B10Float) {
  auto* p = parser("rg11b10float");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRg11B10Float);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg32Uint) {
  auto* p = parser("rg32uint");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRg32Uint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg32Sint) {
  auto* p = parser("rg32sint");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRg32Sint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg32Float) {
  auto* p = parser("rg32float");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRg32Float);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba16Uint) {
  auto* p = parser("rgba16uint");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRgba16Uint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba16Sint) {
  auto* p = parser("rgba16sint");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRgba16Sint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba16Float) {
  auto* p = parser("rgba16float");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRgba16Float);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba32Uint) {
  auto* p = parser("rgba32uint");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRgba32Uint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba32Sint) {
  auto* p = parser("rgba32sint");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRgba32Sint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba32Float) {
  auto* p = parser("rgba32float");
  auto t = p->image_storage_type();
  EXPECT_EQ(t, ast::type::ImageFormat::kRgba32Float);
  EXPECT_FALSE(p->has_error());
}

}  // namespace
}  // namespace wgsl
}  // namespace reader
}  // namespace tint
