// 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/reader/wgsl/parser_impl.h"
#include "src/reader/wgsl/parser_impl_test_helper.h"
#include "src/type/texture_type.h"

namespace tint {
namespace reader {
namespace wgsl {
namespace {

TEST_F(ParserImplTest, ImageStorageType_Invalid) {
  auto p = parser("1234");
  auto t = p->expect_image_storage_type("test");
  EXPECT_TRUE(t.errored);
  EXPECT_TRUE(p->has_error());
  EXPECT_EQ(p->error(), "1:1: invalid format for test");
}

TEST_F(ParserImplTest, ImageStorageType_R8Unorm) {
  auto p = parser("r8unorm");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kR8Unorm);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_R8Snorm) {
  auto p = parser("r8snorm");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kR8Snorm);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_R8Uint) {
  auto p = parser("r8uint");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kR8Uint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_R8Sint) {
  auto p = parser("r8sint");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kR8Sint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_R16Uint) {
  auto p = parser("r16uint");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kR16Uint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_R16Sint) {
  auto p = parser("r16sint");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kR16Sint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_R16Float) {
  auto p = parser("r16float");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kR16Float);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg8Unorm) {
  auto p = parser("rg8unorm");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRg8Unorm);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg8Snorm) {
  auto p = parser("rg8snorm");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRg8Snorm);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg8Uint) {
  auto p = parser("rg8uint");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRg8Uint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg8Sint) {
  auto p = parser("rg8sint");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRg8Sint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_R32Uint) {
  auto p = parser("r32uint");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kR32Uint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_R32Sint) {
  auto p = parser("r32sint");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kR32Sint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_R32Float) {
  auto p = parser("r32float");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kR32Float);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg16Uint) {
  auto p = parser("rg16uint");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRg16Uint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg16Sint) {
  auto p = parser("rg16sint");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRg16Sint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg16Float) {
  auto p = parser("rg16float");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRg16Float);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba8Unorm) {
  auto p = parser("rgba8unorm");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRgba8Unorm);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba8UnormSrgb) {
  auto p = parser("rgba8unorm_srgb");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRgba8UnormSrgb);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba8Snorm) {
  auto p = parser("rgba8snorm");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRgba8Snorm);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba8Uint) {
  auto p = parser("rgba8uint");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRgba8Uint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba8Sint) {
  auto p = parser("rgba8sint");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRgba8Sint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Bgra8Unorm) {
  auto p = parser("bgra8unorm");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kBgra8Unorm);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Bgra8UnormSrgb) {
  auto p = parser("bgra8unorm_srgb");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kBgra8UnormSrgb);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgb10A2Unorm) {
  auto p = parser("rgb10a2unorm");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRgb10A2Unorm);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg11B10Float) {
  auto p = parser("rg11b10float");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRg11B10Float);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg32Uint) {
  auto p = parser("rg32uint");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRg32Uint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg32Sint) {
  auto p = parser("rg32sint");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRg32Sint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rg32Float) {
  auto p = parser("rg32float");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRg32Float);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba16Uint) {
  auto p = parser("rgba16uint");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRgba16Uint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba16Sint) {
  auto p = parser("rgba16sint");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRgba16Sint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba16Float) {
  auto p = parser("rgba16float");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRgba16Float);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba32Uint) {
  auto p = parser("rgba32uint");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRgba32Uint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba32Sint) {
  auto p = parser("rgba32sint");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRgba32Sint);
  EXPECT_FALSE(p->has_error());
}

TEST_F(ParserImplTest, ImageStorageType_Rgba32Float) {
  auto p = parser("rgba32float");
  auto t = p->expect_image_storage_type("test");
  EXPECT_FALSE(t.errored);
  EXPECT_EQ(t.value, type::ImageFormat::kRgba32Float);
  EXPECT_FALSE(p->has_error());
}

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