// 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/resolver/resolver.h"

#include "gmock/gmock.h"
#include "src/ast/call_statement.h"
#include "src/resolver/resolver_test_helper.h"

namespace tint {
namespace resolver {
namespace {

using ResolverCallValidationTest = ResolverTest;

TEST_F(ResolverCallValidationTest, TooFewArgs) {
  Func("foo", {Param(Sym(), ty.i32()), Param(Sym(), ty.f32())}, ty.void_(),
       {Return()});
  auto* call = Call(Source{{12, 34}}, "foo", 1);
  WrapInFunction(call);

  EXPECT_FALSE(r()->Resolve());
  EXPECT_EQ(
      r()->error(),
      "12:34 error: too few arguments in call to 'foo', expected 2, got 1");
}

TEST_F(ResolverCallValidationTest, TooManyArgs) {
  Func("foo", {Param(Sym(), ty.i32()), Param(Sym(), ty.f32())}, ty.void_(),
       {Return()});
  auto* call = Call(Source{{12, 34}}, "foo", 1, 1.0f, 1.0f);
  WrapInFunction(call);

  EXPECT_FALSE(r()->Resolve());
  EXPECT_EQ(
      r()->error(),
      "12:34 error: too many arguments in call to 'foo', expected 2, got 3");
}

TEST_F(ResolverCallValidationTest, MismatchedArgs) {
  Func("foo", {Param(Sym(), ty.i32()), Param(Sym(), ty.f32())}, ty.void_(),
       {Return()});
  auto* call = Call("foo", Expr(Source{{12, 34}}, true), 1.0f);
  WrapInFunction(call);

  EXPECT_FALSE(r()->Resolve());
  EXPECT_EQ(r()->error(),
            "12:34 error: type mismatch for argument 1 in call to 'foo', "
            "expected 'i32', got 'bool'");
}

TEST_F(ResolverCallValidationTest, UnusedRetval) {
  // fn func() -> f32 { return 1.0; }
  // fn main() {func(); return; }

  Func("func", {}, ty.f32(), {Return(Expr(1.0f))}, {});

  Func("main", {}, ty.void_(),
       {
           CallStmt(Source{{12, 34}}, Call("func")),
           Return(),
       });

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

TEST_F(ResolverCallValidationTest, PointerArgument_VariableIdentExpr) {
  // fn foo(p: ptr<function, i32>) {}
  // fn main() {
  //   var z: i32 = 1;
  //   foo(&z);
  // }
  auto* param = Param("p", ty.pointer<i32>(ast::StorageClass::kFunction));
  Func("foo", {param}, ty.void_(), {});
  Func("main", {}, ty.void_(),
       {
           Decl(Var("z", ty.i32(), Expr(1))),
           CallStmt(Call("foo", AddressOf(Source{{12, 34}}, Expr("z")))),
       });

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

TEST_F(ResolverCallValidationTest, PointerArgument_ConstIdentExpr) {
  // fn foo(p: ptr<function, i32>) {}
  // fn main() {
  //   let z: i32 = 1;
  //   foo(&z);
  // }
  auto* param = Param("p", ty.pointer<i32>(ast::StorageClass::kFunction));
  Func("foo", {param}, ty.void_(), {});
  Func("main", {}, ty.void_(),
       {
           Decl(Const("z", ty.i32(), Expr(1))),
           CallStmt(Call("foo", AddressOf(Expr(Source{{12, 34}}, "z")))),
       });

  EXPECT_FALSE(r()->Resolve());
  EXPECT_EQ(r()->error(), "12:34 error: cannot take the address of expression");
}

TEST_F(ResolverCallValidationTest, PointerArgument_NotIdentExprVar) {
  // struct S { m: i32; };
  // fn foo(p: ptr<function, i32>) {}
  // fn main() {
  //   var v: S;
  //   foo(&v.m);
  // }
  auto* S = Structure("S", {Member("m", ty.i32())});
  auto* param = Param("p", ty.pointer<i32>(ast::StorageClass::kFunction));
  Func("foo", {param}, ty.void_(), {});
  Func("main", {}, ty.void_(),
       {
           Decl(Var("v", ty.Of(S))),
           CallStmt(Call(
               "foo", AddressOf(Source{{12, 34}}, MemberAccessor("v", "m")))),
       });

  EXPECT_FALSE(r()->Resolve());
  EXPECT_EQ(r()->error(),
            "12:34 error: expected an address-of expression of a variable "
            "identifier expression or a function parameter");
}

TEST_F(ResolverCallValidationTest, PointerArgument_AddressOfMemberAccessor) {
  // struct S { m: i32; };
  // fn foo(p: ptr<function, i32>) {}
  // fn main() {
  //   let v: S = S();
  //   foo(&v.m);
  // }
  auto* S = Structure("S", {Member("m", ty.i32())});
  auto* param = Param("p", ty.pointer<i32>(ast::StorageClass::kFunction));
  Func("foo", {param}, ty.void_(), {});
  Func("main", {}, ty.void_(),
       {
           Decl(Const("v", ty.Of(S), Construct(ty.Of(S)))),
           CallStmt(Call("foo", AddressOf(Expr(Source{{12, 34}},
                                               MemberAccessor("v", "m"))))),
       });

  EXPECT_FALSE(r()->Resolve());
  EXPECT_EQ(r()->error(), "12:34 error: cannot take the address of expression");
}

TEST_F(ResolverCallValidationTest, PointerArgument_FunctionParam) {
  // fn foo(p: ptr<function, i32>) {}
  // fn bar(p: ptr<function, i32>) {
  // foo(p);
  // }
  Func("foo", {Param("p", ty.pointer<i32>(ast::StorageClass::kFunction))},
       ty.void_(), {});
  Func("bar", {Param("p", ty.pointer<i32>(ast::StorageClass::kFunction))},
       ty.void_(), ast::StatementList{CallStmt(Call("foo", Expr("p")))});

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

TEST_F(ResolverCallValidationTest, PointerArgument_FunctionParamWithMain) {
  // fn foo(p: ptr<function, i32>) {}
  // fn bar(p: ptr<function, i32>) {
  // foo(p);
  // }
  // [[stage(fragment)]]
  // fn main() {
  //   var v: i32;
  //   bar(&v);
  // }
  Func("foo", {Param("p", ty.pointer<i32>(ast::StorageClass::kFunction))},
       ty.void_(), {});
  Func("bar", {Param("p", ty.pointer<i32>(ast::StorageClass::kFunction))},
       ty.void_(), ast::StatementList{CallStmt(Call("foo", Expr("p")))});
  Func("main", ast::VariableList{}, ty.void_(),
       {
           Decl(Var("v", ty.i32(), Expr(1))),
           CallStmt(Call("foo", AddressOf(Expr("v")))),
       },
       {
           Stage(ast::PipelineStage::kFragment),
       });

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

TEST_F(ResolverCallValidationTest, LetPointer) {
  // fn x(p : ptr<function, i32>) -> i32 {}
  // [[stage(fragment)]]
  // fn main() {
  //   var v: i32;
  //   let p: ptr<function, i32> = &v;
  //   var c: i32 = x(p);
  // }
  Func("x", {Param("p", ty.pointer<i32>(ast::StorageClass::kFunction))},
       ty.void_(), {});
  auto* v = Var("v", ty.i32());
  auto* p = Const("p", ty.pointer(ty.i32(), ast::StorageClass::kFunction),
                  AddressOf(v));
  auto* c = Var("c", ty.i32(), ast::StorageClass::kNone,
                Call("x", Expr(Source{{12, 34}}, p)));
  Func("main", ast::VariableList{}, ty.void_(),
       {
           Decl(v),
           Decl(p),
           Decl(c),
       },
       {
           Stage(ast::PipelineStage::kFragment),
       });
  EXPECT_FALSE(r()->Resolve());
  EXPECT_EQ(r()->error(),
            "12:34 error: expected an address-of expression of a variable "
            "identifier expression or a function parameter");
}

TEST_F(ResolverCallValidationTest, LetPointerPrivate) {
  // let p: ptr<private, i32> = &v;
  // fn foo(p : ptr<private, i32>) -> i32 {}
  // var v: i32;
  // [[stage(fragment)]]
  // fn main() {
  //   var c: i32 = foo(p);
  // }
  Func("foo", {Param("p", ty.pointer<i32>(ast::StorageClass::kPrivate))},
       ty.void_(), {});
  auto* v = Global("v", ty.i32(), ast::StorageClass::kPrivate);
  auto* p = Const("p", ty.pointer(ty.i32(), ast::StorageClass::kPrivate),
                  AddressOf(v));
  auto* c = Var("c", ty.i32(), ast::StorageClass::kNone,
                Call("foo", Expr(Source{{12, 34}}, p)));
  Func("main", ast::VariableList{}, ty.void_(),
       {
           Decl(p),
           Decl(c),
       },
       {
           Stage(ast::PipelineStage::kFragment),
       });
  EXPECT_FALSE(r()->Resolve());
  EXPECT_EQ(r()->error(),
            "12:34 error: expected an address-of expression of a variable "
            "identifier expression or a function parameter");
}

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