//
// Copyright 2017 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// VectorizeVectorScalarArithmetic_test.cpp:
//  Tests shader compilation with SH_REWRITE_VECTOR_SCALAR_ARITHMETIC workaround on.

#include "GLSLANG/ShaderLang.h"
#include "angle_gl.h"
#include "gtest/gtest.h"
#include "tests/test_utils/ShaderCompileTreeTest.h"

using namespace sh;

class VectorizeVectorScalarArithmeticTest : public ShaderCompileTreeTest
{
  public:
    VectorizeVectorScalarArithmeticTest() : ShaderCompileTreeTest()
    {
        mExtraCompileOptions = SH_REWRITE_VECTOR_SCALAR_ARITHMETIC;
    }

  protected:
    ::GLenum getShaderType() const override { return GL_FRAGMENT_SHADER; }
    ShShaderSpec getShaderSpec() const override { return SH_GLES3_1_SPEC; }
};

// Test that two ops that generate statements in the parent block inside the same statement don't
// trigger an assert.
TEST_F(VectorizeVectorScalarArithmeticTest, TwoMutatedOpsWithSideEffectsInsideSameStatement)
{
    const std::string &shaderString =
        R"(#version 300 es
        precision highp float;

        out vec4 res;
        uniform float uf;

        void main()
        {
            res = vec4(0.0);
            float f = uf;
            res += f *= f, res += f *= f;
        })";
    if (!compile(shaderString))
    {
        FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
    }
}
