// Copyright 2022 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/transform/remove_continue_in_switch.h"
#include "src/tint/transform/test_helper.h"

namespace tint {
namespace transform {
namespace {

using RemoveContinueInSwitchTest = TransformTest;

TEST_F(RemoveContinueInSwitchTest, ShouldRun_True) {
  auto* src = R"(
fn f() {
  var i = 0;
  loop {
    switch(i) {
      case 0: {
        continue;
        break;
      }
      default: {
        break;
      }
    }
    break;
  }
}
)";

  EXPECT_TRUE(ShouldRun<RemoveContinueInSwitch>(src));
}

TEST_F(RemoveContinueInSwitchTest, ShouldRunEmptyModule_False) {
  auto* src = "";

  EXPECT_FALSE(ShouldRun<RemoveContinueInSwitch>(src));
}

TEST_F(RemoveContinueInSwitchTest, ShouldRunContinueNotInSwitch_False) {
  auto* src = R"(
fn f() {
  var i = 0;
  loop {
    switch(i) {
      case 0: {
        break;
      }
      default: {
        break;
      }
    }

    if (true) {
      continue;
    }
    break;
  }
}
)";

  EXPECT_FALSE(ShouldRun<RemoveContinueInSwitch>(src));
}

TEST_F(RemoveContinueInSwitchTest, ShouldRunContinueInLoopInSwitch_False) {
  auto* src = R"(
fn f() {
  var i = 0;
  switch(i) {
    case 0: {
      loop {
        if (true) {
          continue;
        }
        break;
      }
      break;
    }
    default: {
      break;
    }
  }
}
)";

  EXPECT_FALSE(ShouldRun<RemoveContinueInSwitch>(src));
}

TEST_F(RemoveContinueInSwitchTest, EmptyModule) {
  auto* src = "";
  auto* expect = src;

  DataMap data;
  auto got = Run<RemoveContinueInSwitch>(src, data);

  EXPECT_EQ(expect, str(got));
}

TEST_F(RemoveContinueInSwitchTest, SingleContinue) {
  auto* src = R"(
fn f() {
  var i = 0;
  loop {
    let marker1 = 0;
    switch(i) {
      case 0: {
        continue;
        break;
      }
      default: {
        break;
      }
    }
    let marker2 = 0;
    break;

    continuing {
      let marker3 = 0;
    }
  }
}
)";

  auto* expect = R"(
fn f() {
  var i = 0;
  loop {
    let marker1 = 0;
    var tint_continue : bool = false;
    switch(i) {
      case 0: {
        {
          tint_continue = true;
          break;
        }
        break;
      }
      default: {
        break;
      }
    }
    if (tint_continue) {
      continue;
    }
    let marker2 = 0;
    break;

    continuing {
      let marker3 = 0;
    }
  }
}
)";

  DataMap data;
  auto got = Run<RemoveContinueInSwitch>(src, data);

  EXPECT_EQ(expect, str(got));
}

TEST_F(RemoveContinueInSwitchTest, MultipleContinues) {
  auto* src = R"(
fn f() {
  var i = 0;
  loop {
    let marker1 = 0;
    switch(i) {
      case 0: {
        continue;
        break;
      }
      case 1: {
        continue;
        break;
      }
      case 2: {
        continue;
        break;
      }
      default: {
        break;
      }
    }
    let marker2 = 0;
    break;

    continuing {
      let marker3 = 0;
    }
  }
}
)";

  auto* expect = R"(
fn f() {
  var i = 0;
  loop {
    let marker1 = 0;
    var tint_continue : bool = false;
    switch(i) {
      case 0: {
        {
          tint_continue = true;
          break;
        }
        break;
      }
      case 1: {
        {
          tint_continue = true;
          break;
        }
        break;
      }
      case 2: {
        {
          tint_continue = true;
          break;
        }
        break;
      }
      default: {
        break;
      }
    }
    if (tint_continue) {
      continue;
    }
    let marker2 = 0;
    break;

    continuing {
      let marker3 = 0;
    }
  }
}
)";

  DataMap data;
  auto got = Run<RemoveContinueInSwitch>(src, data);

  EXPECT_EQ(expect, str(got));
}

TEST_F(RemoveContinueInSwitchTest, MultipleSwitch) {
  auto* src = R"(
fn f() {
  var i = 0;
  loop {
    let marker1 = 0;
    switch(i) {
      case 0: {
        continue;
        break;
      }
      default: {
        break;
      }
    }
    let marker2 = 0;

    let marker3 = 0;
    switch(i) {
      case 0: {
        continue;
        break;
      }
      default: {
        break;
      }
    }
    let marker4 = 0;

    break;
  }
}
)";

  auto* expect = R"(
fn f() {
  var i = 0;
  loop {
    let marker1 = 0;
    var tint_continue : bool = false;
    switch(i) {
      case 0: {
        {
          tint_continue = true;
          break;
        }
        break;
      }
      default: {
        break;
      }
    }
    if (tint_continue) {
      continue;
    }
    let marker2 = 0;
    let marker3 = 0;
    var tint_continue_1 : bool = false;
    switch(i) {
      case 0: {
        {
          tint_continue_1 = true;
          break;
        }
        break;
      }
      default: {
        break;
      }
    }
    if (tint_continue_1) {
      continue;
    }
    let marker4 = 0;
    break;
  }
}
)";

  DataMap data;
  auto got = Run<RemoveContinueInSwitch>(src, data);

  EXPECT_EQ(expect, str(got));
}

TEST_F(RemoveContinueInSwitchTest, NestedLoopSwitch) {
  auto* src = R"(
fn f() {
  var i = 0;
  loop {
    let marker1 = 0;
    switch(i) {
      case 0: {
        var j = 0;
        loop {
          let marker3 = 0;
          switch(j) {
            case 0: {
              continue;
              break;
            }
            default: {
              break;
            }
          }
          let marker4 = 0;
          break;
        }
        continue;
        break;
      }
      default: {
        break;
      }
    }
    let marker2 = 0;
    break;
  }
}
)";

  auto* expect = R"(
fn f() {
  var i = 0;
  loop {
    let marker1 = 0;
    var tint_continue_1 : bool = false;
    switch(i) {
      case 0: {
        var j = 0;
        loop {
          let marker3 = 0;
          var tint_continue : bool = false;
          switch(j) {
            case 0: {
              {
                tint_continue = true;
                break;
              }
              break;
            }
            default: {
              break;
            }
          }
          if (tint_continue) {
            continue;
          }
          let marker4 = 0;
          break;
        }
        {
          tint_continue_1 = true;
          break;
        }
        break;
      }
      default: {
        break;
      }
    }
    if (tint_continue_1) {
      continue;
    }
    let marker2 = 0;
    break;
  }
}
)";

  DataMap data;
  auto got = Run<RemoveContinueInSwitch>(src, data);

  EXPECT_EQ(expect, str(got));
}

TEST_F(RemoveContinueInSwitchTest, ExtraScopes) {
  auto* src = R"(
fn f() {
  var i = 0;
  var a = true;
  var b = true;
  var c = true;
  var d = true;
  loop {
    if (a) {
      if (b) {
        let marker1 = 0;
        switch(i) {
          case 0: {
            if (c) {
              if (d) {
                continue;
              }
            }
            break;
          }
          default: {
            break;
          }
        }
        let marker2 = 0;
        break;
      }
    }
  }
}
)";

  auto* expect = R"(
fn f() {
  var i = 0;
  var a = true;
  var b = true;
  var c = true;
  var d = true;
  loop {
    if (a) {
      if (b) {
        let marker1 = 0;
        var tint_continue : bool = false;
        switch(i) {
          case 0: {
            if (c) {
              if (d) {
                {
                  tint_continue = true;
                  break;
                }
              }
            }
            break;
          }
          default: {
            break;
          }
        }
        if (tint_continue) {
          continue;
        }
        let marker2 = 0;
        break;
      }
    }
  }
}
)";

  DataMap data;
  auto got = Run<RemoveContinueInSwitch>(src, data);

  EXPECT_EQ(expect, str(got));
}

TEST_F(RemoveContinueInSwitchTest, ForLoop) {
  auto* src = R"(
fn f() {
  for (var i = 0; i < 4; i = i + 1) {
    let marker1 = 0;
    switch(i) {
      case 0: {
        continue;
        break;
      }
      default: {
        break;
      }
    }
    let marker2 = 0;
    break;
  }
}
)";

  auto* expect = R"(
fn f() {
  for(var i = 0; (i < 4); i = (i + 1)) {
    let marker1 = 0;
    var tint_continue : bool = false;
    switch(i) {
      case 0: {
        {
          tint_continue = true;
          break;
        }
        break;
      }
      default: {
        break;
      }
    }
    if (tint_continue) {
      continue;
    }
    let marker2 = 0;
    break;
  }
}
)";

  DataMap data;
  auto got = Run<RemoveContinueInSwitch>(src, data);

  EXPECT_EQ(expect, str(got));
}

}  // namespace
}  // namespace transform
}  // namespace tint
