From: Haoqun Jiang Date: Tue, 7 Sep 2021 08:36:09 +0000 (+0800) Subject: test: fix getCombination function X-Git-Tag: v3.0.0-beta.1~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1165cd537faf1112b21a0834009e23979480afde;p=thirdparty%2Fvuejs%2Fcreate-vue.git test: fix getCombination function --- diff --git a/snapshot.js b/snapshot.js index 1698d96d..7ea2cbf8 100644 --- a/snapshot.js +++ b/snapshot.js @@ -13,15 +13,30 @@ function createProjectWithFeatureFlags(flags) { const featureFlags = ['typescript', 'jsx', 'router', 'vuex', 'with-tests'] -// FIXME: not correct function getCombinations(arr) { const combinations = [] - for (let i = 0; i < arr.length; i++) { - for (let j = i; j < arr.length; j++) { - const combination = arr.slice(i, j + 1) - combinations.push(combination) + // The following code & comments are generated by GitHub CoPilot. + + // for an array of 5 elements, there are 2^5 - 1= 31 combinations + // (excluding the empty combination) + // equivalent to the following: + // [0, 0, 0, 0, 1] ... [1, 1, 1, 1, 1] + // We can represent the combinations as a binary number + // where each digit represents a flag + // and the number is the index of the flag + // e.g. + // [0, 0, 0, 0, 1] = 0b0001 + // [1, 1, 1, 1, 1] = 0b1111 + + for (let i = 1; i < 1 << arr.length; i++) { + const combination = [] + for (let j = 0; j < arr.length; j++) { + if (i & (1 << j)) { + combination.push(arr[j]) + } } + combinations.push(combination) } return combinations