<!--
Copyright (c) 2019 The Khronos Group Inc.
Use of this source code is governed by an MIT-style license that can be
found in the LICENSE.txt file.
-->

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>WebGL GLSL Conformance Tests</title>
<link rel="stylesheet" href="../../../resources/js-test-style.css"/>
<link rel="stylesheet" href="../../../resources/glsl-feature-tests.css"/>
<script src="../../../js/js-test-pre.js"></script>
<script src="../../../js/webgl-test-utils.js"></script>
<script src="../../../js/glsl-conformance-test.js"></script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<script id="fragmentShaderAGreaterThanBCheckR" type="text/something-not-javascript">
// fragment shader with for scoping should succeed
precision mediump float;
void main() {
  float a = 3.0;
  float b = 2.0;
  float r = 0.0;
  float r0 = 0.5;
  float r1 = 1.0;
  float ab = a > b ? (r = r0, a) : (r = r1, b);
  // Output green if successful, red if not.
  gl_FragColor = ((r == r0) ? vec4(0,1,0,1) : vec4(1,0,0,1));
}
</script>
<script id="fragmentShaderAGreaterThanBCheckAB" type="text/something-not-javascript">
// fragment shader with for scoping should succeed
precision mediump float;
void main() {
  float a = 3.0;
  float b = 2.0;
  float r = 0.0;
  float r0 = 0.5;
  float r1 = 1.0;
  float ab = a > b ? (r = r0, a) : (r = r1, b);
  // Output green if successful, red if not.
  gl_FragColor = ((ab == a) ? vec4(0,1,0,1) : vec4(1,0,0,1));
}
</script>
<script id="fragmentShaderAGreaterThanBCheckT0" type="text/something-not-javascript">
// fragment shader with for scoping should succeed
precision mediump float;
void main() {
  float a = 3.0;
  float b = 2.0;
  float t0 = 0.0;
  float t1 = 0.0;
  float r0 = 0.5;
  float r1 = 1.0;
  float ab = a > b ? (t0 = r0, a) : (t1 = r1, b);
  // Output green if successful, red if not.
  gl_FragColor = ((t0 == r0) ? vec4(0,1,0,1) : vec4(1,0,0,1));
}
</script>
<script id="fragmentShaderAGreaterThanBCheckT1" type="text/something-not-javascript">
// fragment shader with for scoping should succeed
precision mediump float;
void main() {
  float a = 3.0;
  float b = 2.0;
  float t0 = 0.0;
  float t1 = 0.0;
  float r0 = 0.5;
  float r1 = 1.0;
  float ab = a > b ? (t0 = r0, a) : (t1 = r1, b);
  // Output green if successful, red if not.
  gl_FragColor = ((t1 == 0.0) ? vec4(0,1,0,1) : vec4(1,0,0,1));
}
</script>
<script id="fragmentShaderBGreaterThanACheckR" type="text/something-not-javascript">
// fragment shader with for scoping should succeed
precision mediump float;
void main() {
  float a = 2.0;
  float b = 3.0;
  float r = 0.0;
  float r0 = 0.5;
  float r1 = 1.0;
  float ab = a > b ? (r = r0, a) : (r = r1, b);
  // Output green if successful, red if not.
  gl_FragColor = ((r == r1) ? vec4(0,1,0,1) : vec4(1,0,0,1));
}
</script>
<script id="fragmentShaderBGreaterThanACheckAB" type="text/something-not-javascript">
// fragment shader with for scoping should succeed
precision mediump float;
void main() {
  float a = 2.0;
  float b = 3.0;
  float r = 0.0;
  float r0 = 0.5;
  float r1 = 1.0;
  float ab = a > b ? (r = r0, a) : (r = r1, b);
  // Output green if successful, red if not.
  gl_FragColor = ((ab == b) ? vec4(0,1,0,1) : vec4(1,0,0,1));
}
</script>
<script id="fragmentShaderBGreaterThanACheckT0" type="text/something-not-javascript">
// fragment shader with for scoping should succeed
precision mediump float;
void main() {
  float a = 2.0;
  float b = 3.0;
  float t0 = 0.0;
  float t1 = 0.0;
  float r0 = 0.5;
  float r1 = 1.0;
  float ab = a > b ? (t0 = r0, a) : (t1 = r1, b);
  // Output green if successful, red if not.
  gl_FragColor = ((t0 == 0.0) ? vec4(0,1,0,1) : vec4(1,0,0,1));
}
</script>
<script id="fragmentShaderBGreaterThanACheckT1" type="text/something-not-javascript">
// fragment shader with for scoping should succeed
precision mediump float;
void main() {
  float a = 2.0;
  float b = 3.0;
  float t0 = 0.0;
  float t1 = 0.0;
  float r0 = 0.5;
  float r1 = 1.0;
  float ab = a > b ? (t0 = r0, a) : (t1 = r1, b);
  // Output green if successful, red if not.
  gl_FragColor = ((t1 == r1) ? vec4(0,1,0,1) : vec4(1,0,0,1));
}
</script>
<script>
"use strict";
GLSLConformanceTester.runRenderTests([
{
  fShaderId: 'fragmentShaderAGreaterThanBCheckR',
  fShaderSuccess: true,
  linkSuccess: true,
  passMsg: "comma based conditional assignment works",
},
{
  fShaderId: 'fragmentShaderAGreaterThanBCheckAB',
  fShaderSuccess: true,
  linkSuccess: true,
  passMsg: "comma based conditional assignment works",
},
{
  fShaderId: 'fragmentShaderAGreaterThanBCheckT0',
  fShaderSuccess: true,
  linkSuccess: true,
  passMsg: "comma based conditional assignment works",
},
{
  fShaderId: 'fragmentShaderAGreaterThanBCheckT1',
  fShaderSuccess: true,
  linkSuccess: true,
  passMsg: "comma based conditional assignment works",
},
{
  fShaderId: 'fragmentShaderBGreaterThanACheckR',
  fShaderSuccess: true,
  linkSuccess: true,
  passMsg: "comma based conditional assignment works",
},
{
  fShaderId: 'fragmentShaderBGreaterThanACheckAB',
  fShaderSuccess: true,
  linkSuccess: true,
  passMsg: "comma based conditional assignment works",
},
{
  fShaderId: 'fragmentShaderBGreaterThanACheckT0',
  fShaderSuccess: true,
  linkSuccess: true,
  passMsg: "comma based conditional assignment works",
},
{
  fShaderId: 'fragmentShaderBGreaterThanACheckT1',
  fShaderSuccess: true,
  linkSuccess: true,
  passMsg: "comma based conditional assignment works",
}
]);
var successfullyParsed = true;
</script>
</body>
</html>
