diff options
| author | Stephen Blott | 2014-05-16 13:24:38 +0100 | 
|---|---|---|
| committer | Stephen Blott | 2014-05-16 13:24:38 +0100 | 
| commit | 56325ab3858839a9eea61752665192c624c6e852 (patch) | |
| tree | fe87355ab52c0547d55ca821313afcb9ea32534c /tests/unit_tests | |
| parent | a7ac21b392708445374ce9767be2b65eaf89d103 (diff) | |
| download | vimium-56325ab3858839a9eea61752665192c624c6e852.tar.bz2 | |
Import relevancy improvement code.
Diffstat (limited to 'tests/unit_tests')
| -rw-r--r-- | tests/unit_tests/completion_test.coffee | 86 | 
1 files changed, 86 insertions, 0 deletions
diff --git a/tests/unit_tests/completion_test.coffee b/tests/unit_tests/completion_test.coffee index fb267f63..e52dbbc1 100644 --- a/tests/unit_tests/completion_test.coffee +++ b/tests/unit_tests/completion_test.coffee @@ -228,6 +228,92 @@ context "suggestions",      suggestion = new Suggestion(["queryterm"], "tab", "http://ninjawords.com", "ninjawords", returns(1))      assert.equal -1, suggestion.generateHtml().indexOf("http://ninjawords.com") +context "RankingUtils.wordRelevancy", +  should "get a higher relevancy score in shorter URLs", -> +    highScore = RankingUtils.wordRelevancy(["stack"], "http://stackoverflow.com/short",  "nothing") +    lowScore  = RankingUtils.wordRelevancy(["stack"], "http://stackoverflow.com/longer", "nothing") +    assert.isTrue highScore > lowScore + +  should "get a higher relevancy score in shorter titles", -> +    highScore = RankingUtils.wordRelevancy(["ffee"], "http://stackoverflow.com/same", "Coffeescript") +    lowScore  = RankingUtils.wordRelevancy(["ffee"], "http://stackoverflow.com/same", "Coffeescript rocks") +    assert.isTrue highScore > lowScore + +  should "get a higher relevancy score for matching the start of a word (in a URL)", -> +    lowScore  = RankingUtils.wordRelevancy(["stack"], "http://Xstackoverflow.com/same", "nothing") +    highScore = RankingUtils.wordRelevancy(["stack"], "http://stackoverflowX.com/same", "nothing") +    assert.isTrue highScore > lowScore + +  should "get a higher relevancy score for matching the start of a word (in a title)", -> +    lowScore  = RankingUtils.wordRelevancy(["ted"], "http://stackoverflow.com/same", "Dist racted") +    highScore = RankingUtils.wordRelevancy(["ted"], "http://stackoverflow.com/same", "Distrac ted") +    assert.isTrue highScore > lowScore + +  should "get a higher relevancy score for matching a whole word (in a URL)", -> +    lowScore  = RankingUtils.wordRelevancy(["com"], "http://stackoverflow.comX/same", "nothing") +    highScore = RankingUtils.wordRelevancy(["com"], "http://stackoverflowX.com/same", "nothing") +    assert.isTrue highScore > lowScore + +  should "get a higher relevancy score for matching a whole word (in a title)", -> +    lowScore  = RankingUtils.wordRelevancy(["com"], "http://stackoverflow.com/same", "abc comX") +    highScore = RankingUtils.wordRelevancy(["com"], "http://stackoverflow.com/same", "abcX com") +    assert.isTrue highScore > lowScore + +  # # TODO: (smblott) +  # #       Word relevancy should take into account the number of matches (it doesn't currently). +  # should "get a higher relevancy score for multiple matches (in a URL)", -> +  #   lowScore  = RankingUtils.wordRelevancy(["stack"], "http://stackoverflow.com/Xxxxxx", "nothing") +  #   highScore = RankingUtils.wordRelevancy(["stack"], "http://stackoverflow.com/Xstack", "nothing") +  #   assert.isTrue highScore > lowScore + +  # should "get a higher relevancy score for multiple matches (in a title)", -> +  #   lowScore  = RankingUtils.wordRelevancy(["bbc"], "http://stackoverflow.com/same", "BBC Radio 4 (XBCr4)") +  #   highScore = RankingUtils.wordRelevancy(["bbc"], "http://stackoverflow.com/same", "BBC Radio 4 (BBCr4)") +  #   assert.isTrue highScore > lowScore + +# WARNING: The following tests are hardware dependent.  They depend upon +# different but algebraically-equivalent sequences of floating point +# operations yielding the same results.  That they ever work at all is quite +# remarkable. +# TODO: (smblott) +#       Remove these tests when `oldWordRelevancy` is removed. +context "RankingUtils.wordRelevancy (temporary hardware-dependent tests)", +  should "exactly equal oldWordRelevancy for whole word matches (in a URL)", -> +    newScore  = RankingUtils.wordRelevancy(["com"], "http://stackoverflow.com/same", "irrelevant") +    oldScore  = RankingUtils.oldWordRelevancy(["com"], "http://stackoverflow.com/same", "irrelevant") +    assert.equal newScore, oldScore # remarkable! Exactly equal floats. + +  should "yield 2/3 * oldWordRelevancy for matches at the start of a word (in a URL)", -> +    newScore  = RankingUtils.wordRelevancy(["sta"], "http://stackoverflow.com/same", "irrelevant") +    oldScore  = (2.0/3.0) * RankingUtils.oldWordRelevancy(["sta"], "http://stackoverflow.com/same", "irrelevant") +    assert.equal newScore, oldScore # remarkable! Exactly equal floats. + +  should "yield 1/3 * oldWordRelevancy for matches within a word (in a URL)", -> +    newScore  = RankingUtils.wordRelevancy(["over"], "http://stackoverflow.com/same", "irrelevant") +    oldScore  = (1.0/3.0) * RankingUtils.oldWordRelevancy(["over"], "http://stackoverflow.com/same", "irrelevant") +    assert.equal newScore, oldScore # remarkable! Exactly equal floats. + +  should "exactly equal oldWordRelevancy for whole word matches (in a title)", -> +    newScore  = RankingUtils.wordRelevancy(["relevant"], "http://stackoverflow.com/same", "XX relevant YY") +    # Multiply by 2 to account for new wordRelevancy favoring title. +    oldScore  = 2 * RankingUtils.oldWordRelevancy(["relevant"], "http://stackoverflow.com/same", "XX relevant YY") +    assert.equal newScore, oldScore  # remarkable! Exactly equal floats. + +  should "2/3 * oldWordRelevancy for matches at the start of a word (in a title)", -> +    newScore  = RankingUtils.wordRelevancy(["relev"], "http://stackoverflow.com/same", "XX relevant YY") +    # Multiply by 2 to account for new wordRelevancy favoring title. +    oldScore  = (2.0/3.0) * 2 * RankingUtils.oldWordRelevancy(["relev"], "http://stackoverflow.com/same", "XX relevant YY") +    assert.equal newScore, oldScore  # remarkable! Exactly equal floats. + +  should "1/3 * oldWordRelevancy for matches within a word (in a title)", -> +    newScore  = RankingUtils.wordRelevancy(["elev"], "http://stackoverflow.com/same", "XX relevant YY") +    # Multiply by 2 to account for new wordRelevancy favoring title. +    oldScore  = (1.0/3.0) * 2 * RankingUtils.oldWordRelevancy(["elev"], "http://stackoverflow.com/same", "XX relevant YY") +    assert.equal newScore, oldScore  # remarkable! Exactly equal floats. +# +# End of hardware-dependent tests. + +context "Suggestion.pushMatchingRanges",    should "extract ranges matching term (simple case, two matches)", ->      ranges = []      [ one, two, three ] = [ "one", "two", "three" ]  | 
