Edit

kc3-lang/angle/src/tests/compiler_tests/UnfoldShortCircuitAST_test.cpp

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2018-11-27 11:34:27
    Hash : b980c563
    Message : Reformat all cpp and h files. This applies git cl format --full to all ANGLE sources. Bug: angleproject:2986 Change-Id: Ib504e618c1589332a37e97696cdc3515d739308f Reviewed-on: https://chromium-review.googlesource.com/c/1351367 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>

  • src/tests/compiler_tests/UnfoldShortCircuitAST_test.cpp
  • //
    // Copyright (c) 2018 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.
    //
    // UnfoldShortCircuitAST_test.cpp:
    //  Tests shader compilation with SH_UNFOLD_SHORT_CIRCUIT workaround on.
    
    #include "GLSLANG/ShaderLang.h"
    #include "angle_gl.h"
    #include "gtest/gtest.h"
    #include "tests/test_utils/compiler_test.h"
    
    using namespace sh;
    
    class UnfoldShortCircuitASTTest : public MatchOutputCodeTest
    {
      public:
        UnfoldShortCircuitASTTest()
            : MatchOutputCodeTest(GL_FRAGMENT_SHADER, SH_UNFOLD_SHORT_CIRCUIT, SH_GLSL_330_CORE_OUTPUT)
        {}
    };
    
    // Test unfolding the && operator.
    TEST_F(UnfoldShortCircuitASTTest, UnfoldAnd)
    {
        const std::string &shaderString =
            R"(#version 300 es
            precision highp float;
    
            out vec4 color;
            uniform bool b;
            uniform bool b2;
    
            void main()
            {
                color = vec4(0, 0, 0, 1);
                if (b && b2)
                {
                    color = vec4(0, 1, 0, 1);
                }
            })";
        compile(shaderString);
        ASSERT_TRUE(foundInCode("(_ub) ? (_ub2) : (false)"));
    }
    
    // Test unfolding the || operator.
    TEST_F(UnfoldShortCircuitASTTest, UnfoldOr)
    {
        const std::string &shaderString =
            R"(#version 300 es
            precision highp float;
    
            out vec4 color;
            uniform bool b;
            uniform bool b2;
    
            void main()
            {
                color = vec4(0, 0, 0, 1);
                if (b || b2)
                {
                    color = vec4(0, 1, 0, 1);
                }
            })";
        compile(shaderString);
        ASSERT_TRUE(foundInCode("(_ub) ? (true) : (_ub2)"));
    }
    
    // Test unfolding nested && and || operators. Both should be unfolded.
    TEST_F(UnfoldShortCircuitASTTest, UnfoldNested)
    {
        const std::string &shaderString =
            R"(#version 300 es
            precision highp float;
    
            out vec4 color;
            uniform bool b;
            uniform bool b2;
            uniform bool b3;
    
            void main()
            {
                color = vec4(0, 0, 0, 1);
                if (b && (b2 || b3))
                {
                    color = vec4(0, 1, 0, 1);
                }
            })";
        compile(shaderString);
        ASSERT_TRUE(foundInCode("(_ub) ? (((_ub2) ? (true) : (_ub3))) : (false)"));
    }