test_calculate_probability.js (4944B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 const { SmartTabGroupingManager } = ChromeUtils.importESModule( 5 "moz-src:///browser/components/tabbrowser/SmartTabGrouping.sys.mjs" 6 ); 7 8 add_task(function test_calculate_probability_zero_inputs() { 9 const smartTabGroupingManager = new SmartTabGroupingManager(); 10 const params = { 11 GROUP_SIMILARITY_WEIGHT: 1, 12 TITLE_SIMILARITY_WEIGHT: 1, 13 DOMAIN_SIMILARITY_WEIGHT: 1, 14 INTERCEPT: 0, 15 }; 16 const groupSim = 0; 17 const titleSim = 0; 18 const domainSim = 0; 19 const result = smartTabGroupingManager.calculateProbability( 20 groupSim, 21 titleSim, 22 domainSim, 23 params 24 ); 25 const expected = 1 / (1 + Math.exp(0)); // sigmoid(0) = 0.5 26 Assert.equal( 27 result.toPrecision(4), 28 expected.toPrecision(4), 29 "When both similarities are zero, the probability should be sigmoid(0) = 0.5." 30 ); 31 }); 32 33 add_task(function test_calculate_probability_both_positive() { 34 const smartTabGroupingManager = new SmartTabGroupingManager(); 35 const params = { 36 GROUP_SIMILARITY_WEIGHT: 1, 37 TITLE_SIMILARITY_WEIGHT: 1, 38 DOMAIN_SIMILARITY_WEIGHT: 1, 39 INTERCEPT: 0, 40 }; 41 const groupSim = 1; 42 const titleSim = 1; 43 const domainSim = 1; 44 const result = smartTabGroupingManager.calculateProbability( 45 groupSim, 46 titleSim, 47 domainSim, 48 params 49 ); 50 const expected = 1 / (1 + Math.exp(-3)); 51 Assert.equal( 52 result.toPrecision(4), 53 expected.toPrecision(4), 54 "For positive similarities, the result should match sigmoid(2)." 55 ); 56 }); 57 58 add_task(function test_calculate_probability_mixed_values() { 59 const smartTabGroupingManager = new SmartTabGroupingManager(); 60 const params = { 61 GROUP_SIMILARITY_WEIGHT: 2, 62 TITLE_SIMILARITY_WEIGHT: 3, 63 DOMAIN_SIMILARITY_WEIGHT: 0, 64 INTERCEPT: 0.5, 65 }; 66 const groupSim = 1; 67 const titleSim = -1; 68 const domainSim = -1; 69 const result = smartTabGroupingManager.calculateProbability( 70 groupSim, 71 titleSim, 72 domainSim, 73 params 74 ); 75 const expected = 1 / (1 + Math.exp(0.5)); // sigmoid(-0.5) 76 Assert.equal( 77 result.toPrecision(4), 78 expected.toPrecision(4), 79 "Mixed values should yield sigmoid(-0.5)." 80 ); 81 }); 82 83 add_task(function test_calculate_probability_zero_weights() { 84 const smartTabGroupingManager = new SmartTabGroupingManager(); 85 const params = { 86 GROUP_SIMILARITY_WEIGHT: 0, 87 TITLE_SIMILARITY_WEIGHT: 0, 88 DOMAIN_SIMILARITY_WEIGHT: 0, 89 INTERCEPT: 0, 90 }; 91 const groupSim = 5; 92 const titleSim = -3; 93 const domainSim = 1; 94 const result = smartTabGroupingManager.calculateProbability( 95 groupSim, 96 titleSim, 97 domainSim, 98 params 99 ); 100 const expected = 1 / (1 + Math.exp(0)); // sigmoid(0) = 0.5 101 Assert.equal( 102 result.toPrecision(4), 103 expected.toPrecision(4), 104 "With zero weights, the probability should always be 0.5 (sigmoid(0))." 105 ); 106 }); 107 108 add_task(function test_calculate_probability_extreme_positive() { 109 const smartTabGroupingManager = new SmartTabGroupingManager(); 110 const params = { 111 GROUP_SIMILARITY_WEIGHT: 1, 112 TITLE_SIMILARITY_WEIGHT: 1, 113 DOMAIN_SIMILARITY_WEIGHT: 1, 114 INTERCEPT: 0, 115 }; 116 const groupSim = 10; 117 const titleSim = 10; 118 const domainSim = 10; 119 const result = smartTabGroupingManager.calculateProbability( 120 groupSim, 121 titleSim, 122 domainSim, 123 params 124 ); 125 const expected = 1 / (1 + Math.exp(-30)); 126 Assert.equal( 127 result.toPrecision(4), 128 expected.toPrecision(4), 129 "Extreme positive similarities should yield a probability very close to 1." 130 ); 131 }); 132 133 add_task(function test_calculate_probability_extreme_negative() { 134 const smartTabGroupingManager = new SmartTabGroupingManager(); 135 const params = { 136 GROUP_SIMILARITY_WEIGHT: 1, 137 TITLE_SIMILARITY_WEIGHT: 1, 138 DOMAIN_SIMILARITY_WEIGHT: 1, 139 INTERCEPT: 0, 140 }; 141 const groupSim = -10; 142 const titleSim = -10; 143 const domainSim = -10; 144 const result = smartTabGroupingManager.calculateProbability( 145 groupSim, 146 titleSim, 147 domainSim, 148 params 149 ); 150 const expected = 1 / (1 + Math.exp(30)); 151 Assert.equal( 152 result.toPrecision(4), 153 expected.toPrecision(4), 154 "Extreme negative similarities should yield a probability very close to 0." 155 ); 156 }); 157 158 add_task(function test_calculate_probability_negative_intercept() { 159 const smartTabGroupingManager = new SmartTabGroupingManager(); 160 const params = { 161 GROUP_SIMILARITY_WEIGHT: 1, 162 TITLE_SIMILARITY_WEIGHT: 1, 163 DOMAIN_SIMILARITY_WEIGHT: 0, 164 INTERCEPT: -1, 165 }; 166 const groupSim = 0.5; 167 const titleSim = 0.5; 168 const domainSim = 0.5; 169 const result = smartTabGroupingManager.calculateProbability( 170 groupSim, 171 titleSim, 172 domainSim, 173 params 174 ); 175 const expected = 1 / (1 + Math.exp(0)); // sigmoid(0) = 0.5 176 Assert.equal( 177 result.toPrecision(4), 178 expected.toPrecision(4), 179 "A negative intercept can adjust the sum so that the output is still sigmoid(0) = 0.5." 180 ); 181 });