try-partialord

Crates.iotry-partialord
lib.rstry-partialord
version0.1.3
sourcesrc
created_at2021-04-08 02:27:39.031093
updated_at2021-04-09 11:56:45.266474
descriptionSafe failable sort, min, max, binary_search functions for PartialOrd. No need to wrap f32, f64 to sort any more.
homepage
repositoryhttps://github.com/aobatact/try-partialord
max_upload_size
id380620
size70,272
aobat (aobatact)

documentation

README

try-partialOrd

Safe failable sort, min, max, binary_search functions for PartialOrd. No need to wrap f32, f64 to sort any more.

This crate provides helper traits for type with only PartialOrd but not Ord( like f32, f64), to use methods where Ord is needed, like sort, min, max and binary_search. These methods are almost same as the methods for Ord, exept that it returns InvalidOrderError when the partial_cmp returns None. These traits have try_ methods like try_sort for slice::sort. This is safer than using something like sort_by with ignoreing None case of partial_cmp because it handle error instead of panic.

Sort is using the same logic as std.

use try_partialord::*;
use rand::distributions::Standard;
use rand::prelude::*;
let mut vec: Vec<f32> = Standard.sample_iter(thread_rng()).take(100).collect();
//no NAN in vec so sort should succed
let sort_result = vec.try_sort();
assert!(sort_result.is_ok());
assert!(vec.try_is_sorted().unwrap_or(false));
vec.push(f32::NAN);
//NAN in vec so sort should fail
let sort_result = vec.try_sort();
assert!(sort_result.is_err());
assert!(vec.try_is_sorted().is_err());
Commit count: 27

cargo fmt