<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>WebGL Shader Conformance Tests</title>
<link rel="stylesheet" href="../../../../resources/js-test-style.css"/>
<script src="../../../../js/js-test-pre.js"></script>
<script src="../../../../js/webgl-test-utils.js"></script>

<script src="../../../../closure-library/closure/goog/base.js"></script>
<script src="../../../deqp-deps.js"></script>
<script>goog.require('modules.shared.glsShaderLibrary');</script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<canvas id="canvas" width="200" height="100"> </canvas>
<script>
testName = 'reserved_operators';
description("Shader test: " + testName + ".");

var getFilter = function() {
    var queryVars = window.location.search.substring(1).split('&');

    for (var i = 0; i < queryVars.length; i++) {
        var value = queryVars[i].split('=');
        if (decodeURIComponent(value[0]) === 'filter')
            return decodeURIComponent(value[1]);
    }
}


modules.shared.glsShaderLibrary.run(testName, getFilter())

</script>
</body>
</html>
