コード例 #1
0
ファイル: Candidate_test.cpp プロジェクト: BigEndian/.vim
TEST( CandidateTest, DoesntMatchQueryBitset ) {
  Candidate candidate( "foobar" );

  EXPECT_FALSE( candidate.MatchesQueryBitset(
                  LetterBitsetFromString( "foobare" ) ) );
  EXPECT_FALSE( candidate.MatchesQueryBitset(
                  LetterBitsetFromString( "gggg" ) ) );
  EXPECT_FALSE( candidate.MatchesQueryBitset(
                  LetterBitsetFromString( "x" ) ) );
  EXPECT_FALSE( candidate.MatchesQueryBitset(
                  LetterBitsetFromString( "nfoobar" ) ) );
  EXPECT_FALSE( candidate.MatchesQueryBitset(
                  LetterBitsetFromString( "fbrmmm" ) ) );
}
コード例 #2
0
TEST( LetterBitsetFromStringTest, Basic ) {
  Bitset expected;
  expected.set( IndexForChar( 'a' ) );
  expected.set( IndexForChar( 'o' ) );
  expected.set( IndexForChar( 'c' ) );
  expected.set( IndexForChar( 'f' ) );
  expected.set( IndexForChar( 'b' ) );

  std::string text = "abcfoof";
  EXPECT_EQ( expected, LetterBitsetFromString( text ) );
}
コード例 #3
0
ファイル: IdentifierDatabase.cpp プロジェクト: CoderPad/ycmd
void IdentifierDatabase::ResultsForQueryAndType(
  const std::string &query,
  const std::string &filetype,
  std::vector< Result > &results,
  const size_t max_results ) const {
  FiletypeCandidateMap::const_iterator it;
  {
    std::lock_guard< std::mutex > locker( filetype_candidate_map_mutex_ );
    it = filetype_candidate_map_.find( filetype );

    if ( it == filetype_candidate_map_.end() ) {
      return;
    }
  }
  Bitset query_bitset = LetterBitsetFromString( query );
  bool query_has_uppercase_letters = HasUppercase( query );

  std::unordered_set< const Candidate * > seen_candidates;
  seen_candidates.reserve( candidate_repository_.NumStoredCandidates() );

  {
    std::lock_guard< std::mutex > locker( filetype_candidate_map_mutex_ );
    for ( const FilepathToCandidates::value_type & path_and_candidates :
              *it->second ) {
      for ( const Candidate * candidate : *path_and_candidates.second ) {
        if ( ContainsKey( seen_candidates, candidate ) ) {
          continue;
        } else {
          seen_candidates.insert( candidate );
        }

        if ( candidate->Text().empty() ||
             !candidate->MatchesQueryBitset( query_bitset ) ) {
          continue;
        }

        Result result = candidate->QueryMatchResult(
                          query, query_has_uppercase_letters );

        if ( result.IsSubsequence() ) {
          results.push_back( result );
        }
      }
    }
  }

  PartialSort( results, max_results );
}
コード例 #4
0
ファイル: Candidate_test.cpp プロジェクト: BigEndian/.vim
TEST( CandidateTest, MatchesQueryBitsetWhenMatch ) {
  Candidate candidate( "foobaaar" );

  EXPECT_TRUE( candidate.MatchesQueryBitset(
                 LetterBitsetFromString( "foobaaar" ) ) );
  EXPECT_TRUE( candidate.MatchesQueryBitset(
                 LetterBitsetFromString( "fobar" ) ) );
  EXPECT_TRUE( candidate.MatchesQueryBitset(
                 LetterBitsetFromString( "rabof" ) ) );
  EXPECT_TRUE( candidate.MatchesQueryBitset(
                 LetterBitsetFromString( "bfroa" ) ) );
  EXPECT_TRUE( candidate.MatchesQueryBitset(
                 LetterBitsetFromString( "fbr" ) ) );
  EXPECT_TRUE( candidate.MatchesQueryBitset(
                 LetterBitsetFromString( "r" ) ) );
  EXPECT_TRUE( candidate.MatchesQueryBitset(
                 LetterBitsetFromString( "bbb" ) ) );
  EXPECT_TRUE( candidate.MatchesQueryBitset(
                 LetterBitsetFromString( "" ) ) );
}