tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

short-circuiting-in-loop-condition.html (4415B)


      1 <!--
      2 Copyright (c) 2019 The Khronos Group Inc.
      3 Use of this source code is governed by an MIT-style license that can be
      4 found in the LICENSE.txt file.
      5 -->
      6 
      7 <!DOCTYPE html>
      8 <html>
      9 <head>
     10 <meta charset="utf-8">
     11 <title>Short circuit in loop condition test</title>
     12 <link rel="stylesheet" href="../../resources/js-test-style.css"/>
     13 <script src="../../js/js-test-pre.js"></script>
     14 <script src="../../js/webgl-test-utils.js"></script>
     15 <script src="../../js/glsl-conformance-test.js"></script>
     16 </head>
     17 <body>
     18 <div id="description"></div>
     19 <div id="console"></div>
     20 <script id="fshaderWhile" type="x-shader/x-fragment">#version 300 es
     21 precision mediump float;
     22 uniform bool u;
     23 out vec4 result;
     24 int sideEffectCounter;
     25 
     26 bool foo() {
     27  ++sideEffectCounter;
     28  return true;
     29 }
     30 
     31 void main() {
     32  sideEffectCounter = 0;
     33  int iterations = 0;
     34 
     35  while(u && foo()) {
     36    ++iterations;
     37    if (iterations >= 10) {
     38      break;
     39    }
     40  }
     41 
     42  bool success = (u && sideEffectCounter == 10) || (!u && sideEffectCounter == 0);
     43  result = success ? vec4(0, 1.0, 0, 1.0) : vec4(0, 1.0, 0, 0);
     44 }
     45 </script>
     46 <script id="fshaderForCondition" type="x-shader/x-fragment">#version 300 es
     47 precision mediump float;
     48 uniform bool u;
     49 out vec4 result;
     50 int sideEffectCounter;
     51 
     52 bool foo() {
     53  ++sideEffectCounter;
     54  return true;
     55 }
     56 
     57 void main() {
     58  sideEffectCounter = 0;
     59  for(int iterations = 0; u && foo();) {
     60    ++iterations;
     61    if (iterations >= 10) {
     62      break;
     63    }
     64  }
     65 
     66  bool success = (u && sideEffectCounter == 10) || (!u && sideEffectCounter == 0);
     67  result = success ? vec4(0, 1.0, 0, 1.0) : vec4(0, 1.0, 0, 0);
     68 }
     69 </script>
     70 <script id="fshaderFor" type="x-shader/x-fragment">#version 300 es
     71 precision mediump float;
     72 uniform bool u;
     73 out vec4 result;
     74 int sideEffectCounter;
     75 
     76 bool foo() {
     77  ++sideEffectCounter;
     78  return true;
     79 }
     80 
     81 void main() {
     82  sideEffectCounter = 0;
     83  for(int iterations = 0; true; u && foo()) {
     84    ++iterations;
     85    if (iterations > 10) {
     86      break;
     87    }
     88  }
     89 
     90  bool success = (u && sideEffectCounter == 10) || (!u && sideEffectCounter == 0);
     91  result = success ? vec4(0, 1.0, 0, 1.0) : vec4(0, 1.0, 0, 0);
     92 }
     93 </script>
     94 <script id="fshaderDoWhile" type="x-shader/x-fragment">#version 300 es
     95 precision mediump float;
     96 uniform bool u;
     97 out vec4 result;
     98 int sideEffectCounter;
     99 
    100 bool foo() {
    101  ++sideEffectCounter;
    102  return true;
    103 }
    104 
    105 void main() {
    106  sideEffectCounter = 0;
    107  int iterations = 0;
    108 
    109  do {
    110    ++iterations;
    111    if (iterations > 10) {
    112      break;
    113    }
    114  } while (u && foo());
    115 
    116  bool success = (u && sideEffectCounter == 10) || (!u && sideEffectCounter == 0);
    117  result = success ? vec4(0, 1.0, 0, 1.0) : vec4(0, 1.0, 0, 0);
    118 }
    119 </script>
    120 <script id="fshaderSequence" type="x-shader/x-fragment">#version 300 es
    121 precision mediump float;
    122 uniform bool u;
    123 out vec4 result;
    124 int sideEffectCounter;
    125 
    126 bool foo() {
    127  ++sideEffectCounter;
    128  return true;
    129 }
    130 
    131 void main() {
    132  sideEffectCounter = 0;
    133  int iterations = 0;
    134 
    135  while(u, u && foo()) {
    136    ++iterations;
    137    if (iterations >= 10) {
    138      break;
    139    }
    140  }
    141 
    142  bool success = (u && sideEffectCounter == 10) || (!u && sideEffectCounter == 0);
    143  result = success ? vec4(0, 1.0, 0, 1.0) : vec4(0, 1.0, 0, 0);
    144 }
    145 </script>
    146 <script type="text/javascript">
    147 "use strict";
    148 description("Test behavior of a short-circuiting operator in a loop using a function call with side effects");
    149 
    150 var testShaders = [
    151  {fShaderId: 'fshaderWhile', description: 'in while loop condition'},
    152  {fShaderId: 'fshaderForCondition', description: 'in for loop condition'},
    153  {fShaderId: 'fshaderFor', description: 'in for loop expression'},
    154  {fShaderId: 'fshaderDoWhile', description: 'in do-while loop condition'},
    155  {fShaderId: 'fshaderSequence', description: 'inside a sequence in while loop condition'}
    156 ];
    157 
    158 var testList = [];
    159 
    160 for (var i = 0; i < testShaders.length; ++i) {
    161  testList.push({
    162    fShaderId: testShaders[i].fShaderId,
    163    fShaderSuccess: true,
    164    linkSuccess: true,
    165    passMsg: 'Short-circuiting operator with a true condition ' + testShaders[i].description,
    166    uniforms: [{name: "u", functionName: "uniform1i", value: 1}]
    167  });
    168  testList.push({
    169    fShaderId: testShaders[i].fShaderId,
    170    fShaderSuccess: true,
    171    linkSuccess: true,
    172    passMsg: 'Short-circuiting operator with a false condition ' + testShaders[i].description,
    173    uniforms: [{name: "u", functionName: "uniform1i", value: 0}]
    174  });
    175 }
    176 
    177 GLSLConformanceTester.runRenderTests(testList, 2);
    178 </script>
    179 </body>
    180 </html>