diff options
author | Tim Orling <ticotimo@gmail.com> | 2023-12-16 21:41:33 -0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2023-12-17 19:04:40 +0000 |
commit | 5265dd0b102cd7f3c6bb2ae1b18e9f625b834b39 (patch) | |
tree | a5627ae99b3d5c0c8b7b9462c746be0ef398246e /meta/lib/oeqa/files/maturin/guessing-game/src/lib.rs | |
parent | 7ceff48625d01a0e60eb761a9a668d0c942cda89 (diff) | |
download | openembedded-core-5265dd0b102cd7f3c6bb2ae1b18e9f625b834b39.tar.gz |
oeqa: add "maturin develop" SDK test case
'maturin develop' first checks that a virtual environment
has been created, which is a good test for our python3 SDK
environment ;)
Source for guessing-game lifted from https://www.maturin.rs/tutorial
The test case is expected to fetch any necessary crates, build a
development version of the crate and package it as a wheel
Needs at a minimum the following in e.g. local.conf:
TOOLCHAIN_HOST_TASK:append = " nativesdk-python3-maturin"
SDK_INCLUDE_TOOLCHAIN = '1'
SDK_TOOLCHAIN_LANGS += 'rust'
The output of 'maturin develop' should be something like:
...
🔗 Found pyo3 bindings with abi3 support for Python ≥ 3.8
🐍 Not using a specific python interpreter
📡 Using build options features from pyproject.toml
...
Compiling guessing-game v0.1.0 (/path/to/guessing-game)
Finished dev [unoptimized + debuginfo] target(s) in 7.14s
📦 Built wheel for abi3 Python ≥ 3.8 to /path/to/tmpdir/guessing_game-0.1.0-cp38-abi3-linux_x86_64.whl
🛠 Installed guessing-game-0.1.0
Signed-off-by: Tim Orling <tim.orling@konsulko.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib/oeqa/files/maturin/guessing-game/src/lib.rs')
-rw-r--r-- | meta/lib/oeqa/files/maturin/guessing-game/src/lib.rs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/meta/lib/oeqa/files/maturin/guessing-game/src/lib.rs b/meta/lib/oeqa/files/maturin/guessing-game/src/lib.rs new file mode 100644 index 0000000000..6828466ed1 --- /dev/null +++ b/meta/lib/oeqa/files/maturin/guessing-game/src/lib.rs @@ -0,0 +1,48 @@ +use pyo3::prelude::*; +use rand::Rng; +use std::cmp::Ordering; +use std::io; + +#[pyfunction] +fn guess_the_number() { + println!("Guess the number!"); + + let secret_number = rand::thread_rng().gen_range(1..101); + + loop { + println!("Please input your guess."); + + let mut guess = String::new(); + + io::stdin() + .read_line(&mut guess) + .expect("Failed to read line"); + + let guess: u32 = match guess.trim().parse() { + Ok(num) => num, + Err(_) => continue, + }; + + println!("You guessed: {}", guess); + + match guess.cmp(&secret_number) { + Ordering::Less => println!("Too small!"), + Ordering::Greater => println!("Too big!"), + Ordering::Equal => { + println!("You win!"); + break; + } + } + } +} + +/// A Python module implemented in Rust. The name of this function must match +/// the `lib.name` setting in the `Cargo.toml`, else Python will not be able to +/// import the module. +#[pymodule] +fn guessing_game(_py: Python, m: &PyModule) -> PyResult<()> { + m.add_function(wrap_pyfunction!(guess_the_number, m)?)?; + + Ok(()) +} + |