<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!--
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.
-->
<link rel="stylesheet" type="text/css" href="../unit.css" />
<script type="application/javascript" src="../unit.js"></script>
<script type="application/javascript" src="../util.js"></script>
<script type="application/javascript" src="quickCheckAPI.js"></script>
<script type="application/javascript" src="argGenerators-D_G.js"></script>

<script type="application/javascript">

// Test that all GL functions specified in ArgGenerators work
// when called with randomly generated valid arguments
Tests.testValidArgs = function() {
  var randomTestCount = 100;
  for (var name in ArgGenerators) {
    try {
      if (!GL[name])
        throw (new Error(name + " is missing from the WebGL context"));
      var argGen = ArgGenerators[name];
      var alreadyTriedArgs = {};
      if (!argGen.generate) continue;
      // test each GL function with randomTestCount randomly generated valid args
      argGeneratorTestRunner(argGen, function(args, gen, setupVars) {
        if (!gen.noAlreadyTriedCheck) {
          var src = Object.toSource(args);
          if (alreadyTriedArgs[src])
            return true;

          alreadyTriedArgs[src] = true;
        }
        var ok = false;
        // if we have an validity checker, assert that the generated args are valid
        if (gen.checkArgValidity)
          assert("Valid args: "+name+"("+argsToString(args)+")",
                gen.checkArgValidity.apply(gen, args));
        var rv;
        // assert that GL function works when called with valid args
        assertOk("This should work: "+name+"("+argsToString(args)+")",
                function(){rv = GL[name].apply(GL, args); ok = true;});
        // if we need to cleanup the return value, do it here
        // e.g. calling gl.deleteBuffer(rv) after testing gl.createBuffer() above
        if (gen.returnValueCleanup)
          assertOk("Cleaning up return value after "+name+"("+argsToString(args)+")",
                   function() { gen.returnValueCleanup(rv); });
        return ok;
      }, argGen.testCount || randomTestCount);
    } catch(e) {
      testFailed(name, e.name, formatError(e));
    }
  }
}

</script>
<style>canvas{position:absolute;}</style>
</head><body>
</body></html>
