// Copyright 2021 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 "src/tint/resolver/resolver.h"

#include "gmock/gmock.h"
#include "src/tint/resolver/resolver_test_helper.h"
#include "src/tint/sem/storage_texture_type.h"

namespace tint::resolver {
namespace {

using ResolverCompoundAssignmentValidationTest = ResolverTest;

TEST_F(ResolverCompoundAssignmentValidationTest, CompatibleTypes) {
  // var a : i32 = 2;
  // a += 2
  auto* var = Var("a", ty.i32(), ast::StorageClass::kNone, Expr(2));
  WrapInFunction(var,
                 CompoundAssign(Source{{12, 34}}, "a", 2, ast::BinaryOp::kAdd));

  EXPECT_TRUE(r()->Resolve()) << r()->error();
}

TEST_F(ResolverCompoundAssignmentValidationTest, CompatibleTypesThroughAlias) {
  // alias myint = i32;
  // var a : myint = 2;
  // a += 2
  auto* myint = Alias("myint", ty.i32());
  auto* var = Var("a", ty.Of(myint), ast::StorageClass::kNone, Expr(2));
  WrapInFunction(var,
                 CompoundAssign(Source{{12, 34}}, "a", 2, ast::BinaryOp::kAdd));

  EXPECT_TRUE(r()->Resolve()) << r()->error();
}

TEST_F(ResolverCompoundAssignmentValidationTest,
       CompatibleTypesAssignThroughPointer) {
  // var a : i32;
  // let b : ptr<function,i32> = &a;
  // *b += 2;
  const auto func = ast::StorageClass::kFunction;
  auto* var_a = Var("a", ty.i32(), func, Expr(2));
  auto* var_b = Const("b", ty.pointer<int>(func), AddressOf(Expr("a")));
  WrapInFunction(
      var_a, var_b,
      CompoundAssign(Source{{12, 34}}, Deref("b"), 2, ast::BinaryOp::kAdd));

  EXPECT_TRUE(r()->Resolve()) << r()->error();
}

TEST_F(ResolverCompoundAssignmentValidationTest, IncompatibleTypes) {
  // {
  //   var a : i32 = 2;
  //   a += 2.3;
  // }

  auto* var = Var("a", ty.i32(), ast::StorageClass::kNone, Expr(2));

  auto* assign =
      CompoundAssign(Source{{12, 34}}, "a", 2.3f, ast::BinaryOp::kAdd);
  WrapInFunction(var, assign);

  ASSERT_FALSE(r()->Resolve());

  EXPECT_EQ(r()->error(),
            "12:34 error: compound assignment operand types are invalid: i32 "
            "add f32");
}

TEST_F(ResolverCompoundAssignmentValidationTest, IncompatibleOp) {
  // {
  //   var a : f32 = 1.0;
  //   a |= 2.0;
  // }

  auto* var = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(1.f));

  auto* assign =
      CompoundAssign(Source{{12, 34}}, "a", 2.0f, ast::BinaryOp::kOr);
  WrapInFunction(var, assign);

  ASSERT_FALSE(r()->Resolve());

  EXPECT_EQ(
      r()->error(),
      "12:34 error: compound assignment operand types are invalid: f32 or f32");
}

TEST_F(ResolverCompoundAssignmentValidationTest, VectorScalar_Pass) {
  // {
  //   var a : vec4<f32>;
  //   a += 1.0;
  // }

  auto* var = Var("a", ty.vec4<f32>(), ast::StorageClass::kNone);

  auto* assign =
      CompoundAssign(Source{{12, 34}}, "a", 1.f, ast::BinaryOp::kAdd);
  WrapInFunction(var, assign);

  EXPECT_TRUE(r()->Resolve()) << r()->error();
}

TEST_F(ResolverCompoundAssignmentValidationTest, ScalarVector_Fail) {
  // {
  //   var a : f32;
  //   a += vec4<f32>();
  // }

  auto* var = Var("a", ty.f32(), ast::StorageClass::kNone);

  auto* assign =
      CompoundAssign(Source{{12, 34}}, "a", vec4<f32>(), ast::BinaryOp::kAdd);
  WrapInFunction(var, assign);

  ASSERT_FALSE(r()->Resolve());

  EXPECT_EQ(r()->error(), "12:34 error: cannot assign 'vec4<f32>' to 'f32'");
}

TEST_F(ResolverCompoundAssignmentValidationTest, MatrixScalar_Pass) {
  // {
  //   var a : mat4x4<f32>;
  //   a *= 2.0;
  // }

  auto* var = Var("a", ty.mat4x4<f32>(), ast::StorageClass::kNone);

  auto* assign =
      CompoundAssign(Source{{12, 34}}, "a", 2.f, ast::BinaryOp::kMultiply);
  WrapInFunction(var, assign);

  EXPECT_TRUE(r()->Resolve()) << r()->error();
}

TEST_F(ResolverCompoundAssignmentValidationTest, ScalarMatrix_Fail) {
  // {
  //   var a : f32;
  //   a *= mat4x4();
  // }

  auto* var = Var("a", ty.f32(), ast::StorageClass::kNone);

  auto* assign = CompoundAssign(Source{{12, 34}}, "a", mat4x4<f32>(),
                                ast::BinaryOp::kMultiply);
  WrapInFunction(var, assign);

  ASSERT_FALSE(r()->Resolve());

  EXPECT_EQ(r()->error(), "12:34 error: cannot assign 'mat4x4<f32>' to 'f32'");
}

TEST_F(ResolverCompoundAssignmentValidationTest, VectorMatrix_Pass) {
  // {
  //   var a : vec4<f32>;
  //   a *= mat4x4();
  // }

  auto* var = Var("a", ty.vec4<f32>(), ast::StorageClass::kNone);

  auto* assign = CompoundAssign(Source{{12, 34}}, "a", mat4x4<f32>(),
                                ast::BinaryOp::kMultiply);
  WrapInFunction(var, assign);

  EXPECT_TRUE(r()->Resolve()) << r()->error();
}

TEST_F(ResolverCompoundAssignmentValidationTest, VectorMatrix_ColumnMismatch) {
  // {
  //   var a : vec4<f32>;
  //   a *= mat4x2();
  // }

  auto* var = Var("a", ty.vec4<f32>(), ast::StorageClass::kNone);

  auto* assign = CompoundAssign(Source{{12, 34}}, "a", mat4x2<f32>(),
                                ast::BinaryOp::kMultiply);
  WrapInFunction(var, assign);

  ASSERT_FALSE(r()->Resolve());

  EXPECT_EQ(r()->error(),
            "12:34 error: compound assignment operand types are invalid: "
            "vec4<f32> multiply mat4x2<f32>");
}

TEST_F(ResolverCompoundAssignmentValidationTest, VectorMatrix_ResultMismatch) {
  // {
  //   var a : vec4<f32>;
  //   a *= mat2x4();
  // }

  auto* var = Var("a", ty.vec4<f32>(), ast::StorageClass::kNone);

  auto* assign = CompoundAssign(Source{{12, 34}}, "a", mat2x4<f32>(),
                                ast::BinaryOp::kMultiply);
  WrapInFunction(var, assign);

  ASSERT_FALSE(r()->Resolve());

  EXPECT_EQ(r()->error(),
            "12:34 error: cannot assign 'vec2<f32>' to 'vec4<f32>'");
}

TEST_F(ResolverCompoundAssignmentValidationTest, MatrixVector_Fail) {
  // {
  //   var a : mat4x4<f32>;
  //   a *= vec4();
  // }

  auto* var = Var("a", ty.mat4x4<f32>(), ast::StorageClass::kNone);

  auto* assign = CompoundAssign(Source{{12, 34}}, "a", vec4<f32>(),
                                ast::BinaryOp::kMultiply);
  WrapInFunction(var, assign);

  ASSERT_FALSE(r()->Resolve());

  EXPECT_EQ(r()->error(),
            "12:34 error: cannot assign 'vec4<f32>' to 'mat4x4<f32>'");
}

TEST_F(ResolverCompoundAssignmentValidationTest, Phony) {
  // {
  //   _ += 1;
  // }
  WrapInFunction(
      CompoundAssign(Source{{56, 78}}, Phony(), 1, ast::BinaryOp::kAdd));
  EXPECT_FALSE(r()->Resolve());
  EXPECT_EQ(r()->error(),
            "56:78 error: compound assignment operand types are invalid: void "
            "add i32");
}

TEST_F(ResolverCompoundAssignmentValidationTest, ReadOnlyBuffer) {
  // @group(0) @binding(0) var<storage,read> a : i32;
  // {
  //   a += 1;
  // }
  Global(Source{{12, 34}}, "a", ty.i32(), ast::StorageClass::kStorage,
         ast::Access::kRead, GroupAndBinding(0, 0));
  WrapInFunction(CompoundAssign(Source{{56, 78}}, "a", 1, ast::BinaryOp::kAdd));

  EXPECT_FALSE(r()->Resolve());
  EXPECT_EQ(r()->error(),
            "56:78 error: cannot store into a read-only type 'ref<storage, "
            "i32, read>'");
}

TEST_F(ResolverCompoundAssignmentValidationTest, LhsConstant) {
  // let a = 1;
  // a += 1;
  auto* a = Const(Source{{12, 34}}, "a", nullptr, Expr(1));
  WrapInFunction(
      a, CompoundAssign(Expr(Source{{56, 78}}, "a"), 1, ast::BinaryOp::kAdd));

  EXPECT_FALSE(r()->Resolve());
  EXPECT_EQ(r()->error(), R"(56:78 error: cannot assign to const
12:34 note: 'a' is declared here:)");
}

TEST_F(ResolverCompoundAssignmentValidationTest, LhsLiteral) {
  // 1 += 1;
  WrapInFunction(
      CompoundAssign(Expr(Source{{56, 78}}, 1), 1, ast::BinaryOp::kAdd));

  EXPECT_FALSE(r()->Resolve());
  EXPECT_EQ(r()->error(), "56:78 error: cannot assign to value of type 'i32'");
}

TEST_F(ResolverCompoundAssignmentValidationTest, LhsAtomic) {
  // var<workgroup> a : atomic<i32>;
  // a += a;
  Global(Source{{12, 34}}, "a", ty.atomic(ty.i32()),
         ast::StorageClass::kWorkgroup);
  WrapInFunction(
      CompoundAssign(Source{{56, 78}}, "a", "a", ast::BinaryOp::kAdd));

  EXPECT_FALSE(r()->Resolve());
  EXPECT_EQ(r()->error(),
            "56:78 error: compound assignment operand types are invalid: "
            "atomic<i32> add atomic<i32>");
}

}  // namespace
}  // namespace tint::resolver
