ParamGenerator: Return the end iterator if any param is empty

Not doing so produces an infinite loop when iterating from begin to end.

Bug: none
Change-Id: I323587a19ba1618d7e9a326de2ee398ae5e0bb7b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/51762
Auto-Submit: Austin Eng <enga@chromium.org>
Reviewed-by: Brandon Jones <bajones@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Brandon Jones <bajones@chromium.org>
diff --git a/src/tests/ParamGenerator.h b/src/tests/ParamGenerator.h
index 213756a..8f8dc08 100644
--- a/src/tests/ParamGenerator.h
+++ b/src/tests/ParamGenerator.h
@@ -46,7 +46,10 @@
   public:
     using value_type = ParamStruct;
 
-    ParamGenerator(std::vector<Params>... params) : mParams(params...) {
+    ParamGenerator(std::vector<Params>... params) : mParams(params...), mIsEmpty(false) {
+        for (bool isEmpty : {params.empty()...}) {
+            mIsEmpty |= isEmpty;
+        }
     }
 
     class Iterator : public std::iterator<std::forward_iterator_tag, ParamStruct, size_t> {
@@ -94,6 +97,9 @@
     };
 
     Iterator begin() const {
+        if (mIsEmpty) {
+            return end();
+        }
         return Iterator(mParams, {});
     }
 
@@ -105,6 +111,7 @@
 
   private:
     ParamTuple mParams;
+    bool mIsEmpty;
 };
 
 struct BackendTestConfig;