Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/pkg/qdistrnd/tst/   (Algebra von RWTH Aachen Version 4.15.1©)  Datei vom 20.10.2024 mit Größe 127 B image not shown  

SSL geoname.rs   Sprache: unbekannt

 
Spracherkennung für: .rs vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

use crate::{
    benchmarks::{new_store, BenchmarkWithInput},
    geoname::{Geoname, GeonameType},
    SuggestStore,
};

pub struct GeonameBenchmark {
    args: FetchGeonamesArgs,
    should_match: bool,
}

#[derive(Clone, Debug)]
pub struct FetchGeonamesArgs {
    query: &'static str,
    match_name_prefix: bool,
    geoname_type: Option<GeonameType>,
    filter: Option<Vec<Geoname>>,
}

pub struct IterationInput {
    fetch_args: FetchGeonamesArgs,
    should_match_message: String,
}

impl BenchmarkWithInput for GeonameBenchmark {
    type GlobalInput = SuggestStore;
    type IterationInput = IterationInput;

    fn global_input(&self) -> Self::GlobalInput {
        new_store()
    }

    fn iteration_input(&self) -> Self::IterationInput {
        let fetch_args = self.args.clone();
        // Format the message now so it doesn't take up time in the benchmark.
        let should_match_message = format!("should_match for fetch: {:?}", fetch_args);
        IterationInput {
            fetch_args,
            should_match_message,
        }
    }

    fn benchmarked_code(&self, store: &Self::GlobalInput, i_input: Self::IterationInput) {
        let matches = store
            .fetch_geonames(
                i_input.fetch_args.query,
                i_input.fetch_args.match_name_prefix,
                i_input.fetch_args.geoname_type,
                i_input.fetch_args.filter,
            )
            .unwrap_or_else(|e| panic!("Error fetching geonames: {e}"));

        // Make sure matches were returned or not as expected. Otherwise the
        // benchmark might not be testing what it's intended to test.
        assert_eq!(
            !matches.is_empty(),
            self.should_match,
            "{}",
            i_input.should_match_message,
        );
    }
}

pub fn all_benchmarks() -> Vec<(&'static str, GeonameBenchmark)> {
    let ny_state = Geoname {
        geoname_id: 8,
        name: "New York".to_string(),
        latitude: 43.00035,
        longitude: -75.4999,
        country_code: "US".to_string(),
        admin1_code: "NY".to_string(),
        population: 19274244,
    };

    vec![
        // no matches
        (
            "geoname-fetch-no-match-1",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "nomatch",
                    match_name_prefix: false,
                    geoname_type: None,
                    filter: None,
                },
                should_match: false,
            }
        ),
        (
            "geoname-fetch-no-match-2",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "no match",
                    match_name_prefix: false,
                    geoname_type: None,
                    filter: None,
                },
                should_match: false,
            }
        ),
        (
            "geoname-fetch-no-match-3",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "no match either",
                    match_name_prefix: false,
                    geoname_type: None,
                    filter: None,
                },
                should_match: false,
            }
        ),
        (
            "geoname-fetch-no-match-long",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "this is a very long string that does not match anything in the geonames database but it sure is very long",
                    match_name_prefix: false,
                    geoname_type: None,
                    filter: None,
                },
                should_match: false,
            }
        ),

        // no matches w/ prefix matching
        (
            "geoname-fetch-no-match-1-prefix",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "nomatch",
                    match_name_prefix: true,
                    geoname_type: None,
                    filter: None,
                },
                should_match: false,
            }
        ),
        (
            "geoname-fetch-no-match-2-prefix",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "no match",
                    match_name_prefix: true,
                    geoname_type: None,
                    filter: None,
                },
                should_match: false,
            }
        ),
        (
            "geoname-fetch-no-match-3-prefix",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "no match either",
                    match_name_prefix: true,
                    geoname_type: None,
                    filter: None,
                },
                should_match: false,
            }
        ),
        (
            "geoname-fetch-no-match-long-prefix",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "this is a very long string that does not match anything in the geonames database but it sure is very long",
                    match_name_prefix: true,
                    geoname_type: None,
                    filter: None,
                },
                should_match: false,
            }
        ),

        // abbreviations and airport codes
        (
            "geoname-fetch-abbr-ny",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "ny",
                    match_name_prefix: false,
                    geoname_type: None,
                    filter: None,
                },
                should_match: true,
            }
        ),
        (
            "geoname-fetch-abbr-nyc",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "nyc",
                    match_name_prefix: false,
                    geoname_type: None,
                    filter: None,
                },
                should_match: true,
            }
        ),
        (
            "geoname-fetch-abbr-ca",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "ca",
                    match_name_prefix: false,
                    geoname_type: None,
                    filter: None,
                },
                should_match: true,
            }
        ),
        (
            "geoname-fetch-airport-pdx",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "pdx",
                    match_name_prefix: false,
                    geoname_type: None,
                    filter: None,
                },
                should_match: true,
            }
        ),
        (
            "geoname-fetch-airport-roc",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "roc",
                    match_name_prefix: false,
                    geoname_type: None,
                    filter: None,
                },
                should_match: true,
            }
        ),

        // abbreviations and airport codes w/ prefix matching
        (
            "geoname-fetch-abbr-prefix-ny",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "ny",
                    match_name_prefix: true,
                    geoname_type: None,
                    filter: None,
                },
                should_match: true,
            }
        ),
        (
            "geoname-fetch-abbr-prefix-nyc",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "nyc",
                    match_name_prefix: true,
                    geoname_type: None,
                    filter: None,
                },
                should_match: true,
            }
        ),
        (
            "geoname-fetch-abbr-prefix-ca",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "ca",
                    match_name_prefix: true,
                    geoname_type: None,
                    filter: None,
                },
                should_match: true,
            }
        ),
        (
            "geoname-fetch-airport-prefix-pdx",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "pdx",
                    match_name_prefix: true,
                    geoname_type: None,
                    filter: None,
                },
                should_match: true,
            }
        ),
        (
            "geoname-fetch-airport-prefix-roc",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "roc",
                    match_name_prefix: true,
                    geoname_type: None,
                    filter: None,
                },
                should_match: true,
            }
        ),

        // full names
        (
            "geoname-fetch-name-new-york",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "new york",
                    match_name_prefix: false,
                    geoname_type: None,
                    filter: None,
                },
                should_match: true,
            }
        ),
        (
            "geoname-fetch-name-rochester",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "rochester",
                    match_name_prefix: false,
                    geoname_type: None,
                    filter: None,
                },
                should_match: true,
            }
        ),

        // full names w/ prefix matching
        (
            "geoname-fetch-name-prefix-new-york",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "new york",
                    match_name_prefix: true,
                    geoname_type: None,
                    filter: None,
                },
                should_match: true,
            }
        ),
        (
            "geoname-fetch-name-prefix-rochester",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "rochester",
                    match_name_prefix: true,
                    geoname_type: None,
                    filter: None,
                },
                should_match: true,
            }
        ),

        // restricting to a geoname type
        (
            "geoname-fetch-type-city-ny",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "ny",
                    match_name_prefix: false,
                    geoname_type: Some(GeonameType::City),
                    filter: None,
                },
                should_match: true,
            }
        ),
        (
            "geoname-fetch-type-region-ny",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "ny",
                    match_name_prefix: false,
                    geoname_type: Some(GeonameType::Region),
                    filter: None,
                },
                should_match: true,
            }
        ),

        // filtering
        (
            "geoname-fetch-filter-ny",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "ny",
                    match_name_prefix: false,
                    geoname_type: None,
                    filter: Some(vec![ny_state.clone()]),
                },
                should_match: true,
            }
        ),

        // restricting to a geoname type + filtering
        (
            "geoname-fetch-type-filter-city-ny",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "ny",
                    match_name_prefix: false,
                    geoname_type: Some(GeonameType::City),
                    filter: Some(vec![ny_state.clone()]),
                },
                should_match: true,
            }
        ),
        (
            "geoname-fetch-type-filter-region-ny",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "ny",
                    match_name_prefix: false,
                    geoname_type: Some(GeonameType::Region),
                    filter: Some(vec![ny_state.clone()]),
                },
                should_match: true,
            }
        ),

        // restricting to a geoname type + filtering w/ prefix matching
        (
            "geoname-fetch-type-filter-prefix-city-ny",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "ny",
                    match_name_prefix: true,
                    geoname_type: Some(GeonameType::City),
                    filter: Some(vec![ny_state.clone()]),
                },
                should_match: true,
            }
        ),
        (
            "geoname-fetch-type-filter-prefix-region-ny",
            GeonameBenchmark {
                args: FetchGeonamesArgs {
                    query: "ny",
                    match_name_prefix: true,
                    geoname_type: Some(GeonameType::Region),
                    filter: Some(vec![ny_state.clone()]),
                },
                should_match: true,
            }
        ),
    ]
}

[ Verzeichnis aufwärts0.41unsichere Verbindung  ]