pyo3_benchmarks: add a benchmark for the "only simple args" case

This is the case that will be helped by fastcall support,
so add it first as a baseline.
This commit is contained in:
Georg Brandl 2021-05-19 08:17:06 +02:00
parent 51ba541a18
commit 473474cae7
2 changed files with 21 additions and 0 deletions

View File

@ -24,10 +24,16 @@ fn mixed_args<'a>(
#[pyfunction] #[pyfunction]
fn no_args() {} fn no_args() {}
#[pyfunction(b = 2, "*", c = 4)]
fn simple_args(a: i32, b: i32, c: i32) -> (i32, i32, i32) {
(a, b, c)
}
#[pymodule] #[pymodule]
fn _pyo3_benchmarks(_py: Python<'_>, m: &PyModule) -> PyResult<()> { fn _pyo3_benchmarks(_py: Python<'_>, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(args_and_kwargs, m)?)?; m.add_function(wrap_pyfunction!(args_and_kwargs, m)?)?;
m.add_function(wrap_pyfunction!(mixed_args, m)?)?; m.add_function(wrap_pyfunction!(mixed_args, m)?)?;
m.add_function(wrap_pyfunction!(no_args, m)?)?; m.add_function(wrap_pyfunction!(no_args, m)?)?;
m.add_function(wrap_pyfunction!(simple_args, m)?)?;
Ok(()) Ok(())
} }

View File

@ -44,3 +44,18 @@ def test_no_args_py(benchmark):
py = no_args_py() py = no_args_py()
assert rust == py assert rust == py
benchmark(no_args_py) benchmark(no_args_py)
def test_simple_args(benchmark):
benchmark(pyo3_benchmarks.simple_args, 1, 3, c=5)
def simple_args_py(a, b=2, *, c=4):
return a, b, c
def test_simple_args_py(benchmark):
rust = pyo3_benchmarks.simple_args(1, 3, c=5)
py = simple_args_py(1, 3, c=5)
assert rust == py
benchmark(simple_args_py, 1, 3, c=5)