tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 });