forked from M-Labs/nalgebra
commit
e8fb1ab215
3
.github/Xargo.toml
vendored
3
.github/Xargo.toml
vendored
@ -1,2 +1,5 @@
|
|||||||
[target.x86_64-unknown-linux-gnu.dependencies]
|
[target.x86_64-unknown-linux-gnu.dependencies]
|
||||||
alloc = {}
|
alloc = {}
|
||||||
|
|
||||||
|
[target.thumbv7em-none-eabihf.dependencies]
|
||||||
|
alloc = {}
|
12
.github/workflows/nalgebra-ci-build.yml
vendored
12
.github/workflows/nalgebra-ci-build.yml
vendored
@ -49,13 +49,13 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: test
|
- name: test
|
||||||
run: cargo test --features arbitrary --features serde-serialize,abomonation-serialize,sparse,debug,io,compare,libm,proptest-support,slow-tests;
|
run: cargo test --features arbitrary,rand,serde-serialize,abomonation-serialize,sparse,debug,io,compare,libm,proptest-support,slow-tests;
|
||||||
test-nalgebra-glm:
|
test-nalgebra-glm:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: test nalgebra-glm
|
- name: test nalgebra-glm
|
||||||
run: cargo test -p nalgebra-glm --features arbitrary,serde-serialize,abomonation-serialize,sparse,debug,io,compare,libm,proptest-support,slow-tests;
|
run: cargo test -p nalgebra-glm --features arbitrary,rand,serde-serialize,abomonation-serialize,sparse,debug,io,compare,libm,proptest-support,slow-tests;
|
||||||
test-nalgebra-sparse:
|
test-nalgebra-sparse:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
@ -90,7 +90,11 @@ jobs:
|
|||||||
components: rustfmt
|
components: rustfmt
|
||||||
- name: install xargo
|
- name: install xargo
|
||||||
run: cp .github/Xargo.toml .; rustup component add rust-src; cargo install -f xargo;
|
run: cp .github/Xargo.toml .; rustup component add rust-src; cargo install -f xargo;
|
||||||
- name: build
|
- name: build x86_64-unknown-linux-gnu
|
||||||
run: xargo build --verbose --no-default-features --target=x86_64-unknown-linux-gnu;
|
run: xargo build --verbose --no-default-features --target=x86_64-unknown-linux-gnu;
|
||||||
- name: build --feature alloc
|
- name: build x86_64-unknown-linux-gnu --features rand-no-std
|
||||||
|
run: xargo build --verbose --no-default-features --target=x86_64-unknown-linux-gnu;
|
||||||
|
- name: build x86_64-unknown-linux-gnu --features alloc
|
||||||
run: xargo build --verbose --no-default-features --features alloc --target=x86_64-unknown-linux-gnu;
|
run: xargo build --verbose --no-default-features --features alloc --target=x86_64-unknown-linux-gnu;
|
||||||
|
- name: build thumbv7em-none-eabihf
|
||||||
|
run: xargo build --verbose --no-default-features --target=thumbv7em-none-eabihf;
|
||||||
|
13
CHANGELOG.md
13
CHANGELOG.md
@ -4,13 +4,22 @@ documented here.
|
|||||||
|
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/).
|
This project adheres to [Semantic Versioning](https://semver.org/).
|
||||||
|
|
||||||
## [0.25.0]
|
## [0.25.1]
|
||||||
|
This release replaces the version 0.25.0 which has been yanked. The 0.25.0 version
|
||||||
|
added significant complication to build `nalgebra` targeting a `#[no-std]` platform
|
||||||
|
not supported by `rand`.
|
||||||
|
|
||||||
|
The `rand` dependency is now optional (and disabled by default). You may enable it with:
|
||||||
|
- The `rand-no-std` cargo feature when targeting a `#[no-std]` environment.
|
||||||
|
- The `rand` cargo feature when targeting a `std` environment.
|
||||||
|
|
||||||
|
## [0.25.0] - Yanked
|
||||||
This updates all the dependencies of nalgebra to their latest version, including:
|
This updates all the dependencies of nalgebra to their latest version, including:
|
||||||
- rand 0.8
|
- rand 0.8
|
||||||
- proptest 1.0
|
- proptest 1.0
|
||||||
- simba 0.4
|
- simba 0.4
|
||||||
|
|
||||||
### New crate!
|
### New crate: nalgebra-sparse
|
||||||
Alongside this release of `nalgebra`, we are releasing `nalgebra-sparse`: a crate dedicated to sparse matrix
|
Alongside this release of `nalgebra`, we are releasing `nalgebra-sparse`: a crate dedicated to sparse matrix
|
||||||
computation with `nalgebra`. The `sparse` module of `nalgebra`itself still exists for backward compatibility
|
computation with `nalgebra`. The `sparse` module of `nalgebra`itself still exists for backward compatibility
|
||||||
but it will be deprecated soon in favor of the `nalgebra-sparse` crate.
|
but it will be deprecated soon in favor of the `nalgebra-sparse` crate.
|
||||||
|
11
Cargo.toml
11
Cargo.toml
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nalgebra"
|
name = "nalgebra"
|
||||||
version = "0.25.0"
|
version = "0.25.1"
|
||||||
authors = [ "Sébastien Crozet <developer@crozet.re>" ]
|
authors = [ "Sébastien Crozet <developer@crozet.re>" ]
|
||||||
|
|
||||||
description = "General-purpose linear algebra library with transformations and statically-sized or dynamically-sized matrices."
|
description = "General-purpose linear algebra library with transformations and statically-sized or dynamically-sized matrices."
|
||||||
@ -23,12 +23,14 @@ path = "src/lib.rs"
|
|||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = [ "std" ]
|
default = [ "std" ]
|
||||||
std = [ "matrixmultiply", "rand/std", "rand/std_rng", "rand_distr", "simba/std" ]
|
std = [ "matrixmultiply", "simba/std" ]
|
||||||
|
rand-no-std = [ "rand-package" ]
|
||||||
|
rand = [ "rand-no-std", "rand-package/std", "rand-package/std_rng", "rand_distr" ]
|
||||||
arbitrary = [ "quickcheck" ]
|
arbitrary = [ "quickcheck" ]
|
||||||
serde-serialize = [ "serde", "num-complex/serde" ]
|
serde-serialize = [ "serde", "num-complex/serde" ]
|
||||||
abomonation-serialize = [ "abomonation" ]
|
abomonation-serialize = [ "abomonation" ]
|
||||||
sparse = [ ]
|
sparse = [ ]
|
||||||
debug = [ "approx/num-complex", "rand/std" ]
|
debug = [ "approx/num-complex", "rand" ]
|
||||||
alloc = [ ]
|
alloc = [ ]
|
||||||
io = [ "pest", "pest_derive" ]
|
io = [ "pest", "pest_derive" ]
|
||||||
compare = [ "matrixcompare-core" ]
|
compare = [ "matrixcompare-core" ]
|
||||||
@ -43,8 +45,7 @@ slow-tests = []
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
typenum = "1.12"
|
typenum = "1.12"
|
||||||
generic-array = "0.14"
|
generic-array = "0.14"
|
||||||
rand = { version = "0.8", default-features = false }
|
rand-package = { package = "rand", version = "0.8", optional = true, default-features = false }
|
||||||
getrandom = { version = "0.2", default-features = false, features = [ "js" ] } # For wasm
|
|
||||||
num-traits = { version = "0.2", default-features = false }
|
num-traits = { version = "0.2", default-features = false }
|
||||||
num-complex = { version = "0.3", default-features = false }
|
num-complex = { version = "0.3", default-features = false }
|
||||||
num-rational = { version = "0.3", default-features = false }
|
num-rational = { version = "0.3", default-features = false }
|
||||||
|
@ -9,7 +9,7 @@ homepage = "https://nalgebra.org"
|
|||||||
repository = "https://github.com/dimforge/nalgebra"
|
repository = "https://github.com/dimforge/nalgebra"
|
||||||
readme = "../README.md"
|
readme = "../README.md"
|
||||||
categories = [ "science", "mathematics" ]
|
categories = [ "science", "mathematics" ]
|
||||||
keywords = [ "linear", "algebra", "matrix", "vector", "math", "lapack" ]
|
keywords = [ "linear", "algebra", "matrix", "vector", "lapack" ]
|
||||||
license = "BSD-3-Clause"
|
license = "BSD-3-Clause"
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
||||||
|
@ -3,6 +3,14 @@ name = "nalgebra-sparse"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
authors = [ "Andreas Longva", "Sébastien Crozet <developer@crozet.re>" ]
|
authors = [ "Andreas Longva", "Sébastien Crozet <developer@crozet.re>" ]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
description = "Sparse matrix computation based on nalgebra."
|
||||||
|
documentation = "https://www.nalgebra.org/docs"
|
||||||
|
homepage = "https://nalgebra.org"
|
||||||
|
repository = "https://github.com/dimforge/nalgebra"
|
||||||
|
readme = "../README.md"
|
||||||
|
categories = [ "science", "mathematics", "wasm", "no-std" ]
|
||||||
|
keywords = [ "linear", "algebra", "matrix", "vector", "math" ]
|
||||||
|
license = "Apache-2.0"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
proptest-support = ["proptest", "nalgebra/proptest-support"]
|
proptest-support = ["proptest", "nalgebra/proptest-support"]
|
||||||
|
@ -7,18 +7,16 @@ use crate::base::storage::Owned;
|
|||||||
use quickcheck::{Arbitrary, Gen};
|
use quickcheck::{Arbitrary, Gen};
|
||||||
|
|
||||||
use num::{Bounded, One, Zero};
|
use num::{Bounded, One, Zero};
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "rand-no-std")]
|
||||||
use rand;
|
use rand::{
|
||||||
use rand::distributions::{Distribution, Standard};
|
distributions::{Distribution, Standard},
|
||||||
use rand::Rng;
|
Rng,
|
||||||
#[cfg(feature = "std")]
|
};
|
||||||
use rand_distr::StandardNormal;
|
|
||||||
use std::iter;
|
use std::iter;
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use typenum::{self, Cmp, Greater};
|
use typenum::{self, Cmp, Greater};
|
||||||
|
|
||||||
#[cfg(feature = "std")]
|
|
||||||
use simba::scalar::RealField;
|
|
||||||
use simba::scalar::{ClosedAdd, ClosedMul};
|
use simba::scalar::{ClosedAdd, ClosedMul};
|
||||||
|
|
||||||
use crate::base::allocator::Allocator;
|
use crate::base::allocator::Allocator;
|
||||||
@ -281,7 +279,7 @@ where
|
|||||||
|
|
||||||
/// Creates a matrix filled with random values.
|
/// Creates a matrix filled with random values.
|
||||||
#[inline]
|
#[inline]
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "rand")]
|
||||||
pub fn new_random_generic(nrows: R, ncols: C) -> Self
|
pub fn new_random_generic(nrows: R, ncols: C) -> Self
|
||||||
where
|
where
|
||||||
Standard: Distribution<N>,
|
Standard: Distribution<N>,
|
||||||
@ -291,6 +289,7 @@ where
|
|||||||
|
|
||||||
/// Creates a matrix filled with random values from the given distribution.
|
/// Creates a matrix filled with random values from the given distribution.
|
||||||
#[inline]
|
#[inline]
|
||||||
|
#[cfg(feature = "rand-no-std")]
|
||||||
pub fn from_distribution_generic<Distr: Distribution<N> + ?Sized, G: Rng + ?Sized>(
|
pub fn from_distribution_generic<Distr: Distribution<N> + ?Sized, G: Rng + ?Sized>(
|
||||||
nrows: R,
|
nrows: R,
|
||||||
ncols: C,
|
ncols: C,
|
||||||
@ -589,6 +588,7 @@ macro_rules! impl_constructors(
|
|||||||
|
|
||||||
/// Creates a matrix or vector filled with random values from the given distribution.
|
/// Creates a matrix or vector filled with random values from the given distribution.
|
||||||
#[inline]
|
#[inline]
|
||||||
|
#[cfg(feature = "rand-no-std")]
|
||||||
pub fn from_distribution<Distr: Distribution<N> + ?Sized, G: Rng + ?Sized>(
|
pub fn from_distribution<Distr: Distribution<N> + ?Sized, G: Rng + ?Sized>(
|
||||||
$($args: usize,)*
|
$($args: usize,)*
|
||||||
distribution: &Distr,
|
distribution: &Distr,
|
||||||
@ -599,7 +599,7 @@ macro_rules! impl_constructors(
|
|||||||
|
|
||||||
/// Creates a matrix filled with random values.
|
/// Creates a matrix filled with random values.
|
||||||
#[inline]
|
#[inline]
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "rand")]
|
||||||
pub fn new_random($($args: usize),*) -> Self
|
pub fn new_random($($args: usize),*) -> Self
|
||||||
where Standard: Distribution<N> {
|
where Standard: Distribution<N> {
|
||||||
Self::new_random_generic($($gargs),*)
|
Self::new_random_generic($($gargs),*)
|
||||||
@ -817,6 +817,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "rand-no-std")]
|
||||||
impl<N: Scalar, R: Dim, C: Dim> Distribution<MatrixMN<N, R, C>> for Standard
|
impl<N: Scalar, R: Dim, C: Dim> Distribution<MatrixMN<N, R, C>> for Standard
|
||||||
where
|
where
|
||||||
DefaultAllocator: Allocator<N, R, C>,
|
DefaultAllocator: Allocator<N, R, C>,
|
||||||
@ -851,11 +852,11 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "rand")]
|
||||||
impl<N: RealField, D: DimName> Distribution<Unit<VectorN<N, D>>> for Standard
|
impl<N: crate::RealField, D: DimName> Distribution<Unit<VectorN<N, D>>> for Standard
|
||||||
where
|
where
|
||||||
DefaultAllocator: Allocator<N, D>,
|
DefaultAllocator: Allocator<N, D>,
|
||||||
StandardNormal: Distribution<N>,
|
rand_distr::StandardNormal: Distribution<N>,
|
||||||
{
|
{
|
||||||
/// Generate a uniformly distributed random unit vector.
|
/// Generate a uniformly distributed random unit vector.
|
||||||
#[inline]
|
#[inline]
|
||||||
@ -863,7 +864,7 @@ where
|
|||||||
Unit::new_normalize(VectorN::from_distribution_generic(
|
Unit::new_normalize(VectorN::from_distribution_generic(
|
||||||
D::name(),
|
D::name(),
|
||||||
U1,
|
U1,
|
||||||
&StandardNormal,
|
&rand_distr::StandardNormal,
|
||||||
rng,
|
rng,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
#[cfg(feature = "arbitrary")]
|
#[cfg(feature = "arbitrary")]
|
||||||
use quickcheck::{Arbitrary, Gen};
|
use quickcheck::{Arbitrary, Gen};
|
||||||
use rand::distributions::{Distribution, Standard};
|
|
||||||
use rand::Rng;
|
#[cfg(feature = "rand-no-std")]
|
||||||
|
use rand::{
|
||||||
|
distributions::{Distribution, Standard},
|
||||||
|
Rng,
|
||||||
|
};
|
||||||
|
|
||||||
/// Simple helper function for rejection sampling
|
/// Simple helper function for rejection sampling
|
||||||
#[cfg(feature = "arbitrary")]
|
#[cfg(feature = "arbitrary")]
|
||||||
@ -17,6 +21,7 @@ pub fn reject<F: FnMut(&T) -> bool, T: Arbitrary>(g: &mut Gen, f: F) -> T {
|
|||||||
|
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
#[inline]
|
#[inline]
|
||||||
|
#[cfg(feature = "rand-no-std")]
|
||||||
pub fn reject_rand<G: Rng + ?Sized, F: FnMut(&T) -> bool, T>(g: &mut G, f: F) -> T
|
pub fn reject_rand<G: Rng + ?Sized, F: FnMut(&T) -> bool, T>(g: &mut G, f: F) -> T
|
||||||
where
|
where
|
||||||
Standard: Distribution<T>,
|
Standard: Distribution<T>,
|
||||||
|
@ -4,10 +4,12 @@ use crate::base::storage::Owned;
|
|||||||
use quickcheck::{Arbitrary, Gen};
|
use quickcheck::{Arbitrary, Gen};
|
||||||
|
|
||||||
use num::One;
|
use num::One;
|
||||||
use rand::distributions::{Distribution, Standard};
|
#[cfg(feature = "rand-no-std")]
|
||||||
use rand::Rng;
|
use rand::{
|
||||||
|
distributions::{Distribution, Standard},
|
||||||
|
Rng,
|
||||||
|
};
|
||||||
|
|
||||||
use simba::scalar::RealField;
|
|
||||||
use simba::simd::SimdRealField;
|
use simba::simd::SimdRealField;
|
||||||
|
|
||||||
use crate::base::allocator::Allocator;
|
use crate::base::allocator::Allocator;
|
||||||
@ -80,7 +82,8 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<N: RealField, D: DimName, R> Distribution<Isometry<N, D, R>> for Standard
|
#[cfg(feature = "rand-no-std")]
|
||||||
|
impl<N: crate::RealField, D: DimName, R> Distribution<Isometry<N, D, R>> for Standard
|
||||||
where
|
where
|
||||||
R: AbstractRotation<N, D>,
|
R: AbstractRotation<N, D>,
|
||||||
Standard: Distribution<N> + Distribution<R>,
|
Standard: Distribution<N> + Distribution<R>,
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
#[cfg(feature = "arbitrary")]
|
#[cfg(feature = "arbitrary")]
|
||||||
use quickcheck::{Arbitrary, Gen};
|
use quickcheck::{Arbitrary, Gen};
|
||||||
use rand::distributions::{Distribution, Standard};
|
#[cfg(feature = "rand-no-std")]
|
||||||
use rand::Rng;
|
use rand::{
|
||||||
|
distributions::{Distribution, Standard},
|
||||||
|
Rng,
|
||||||
|
};
|
||||||
#[cfg(feature = "serde-serialize")]
|
#[cfg(feature = "serde-serialize")]
|
||||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
@ -10,7 +13,6 @@ use std::mem;
|
|||||||
use simba::scalar::RealField;
|
use simba::scalar::RealField;
|
||||||
|
|
||||||
use crate::base::dimension::U3;
|
use crate::base::dimension::U3;
|
||||||
use crate::base::helper;
|
|
||||||
use crate::base::storage::Storage;
|
use crate::base::storage::Storage;
|
||||||
use crate::base::{Matrix4, Vector, Vector3};
|
use crate::base::{Matrix4, Vector, Vector3};
|
||||||
|
|
||||||
@ -684,11 +686,13 @@ impl<N: RealField> Orthographic3<N> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "rand-no-std")]
|
||||||
impl<N: RealField> Distribution<Orthographic3<N>> for Standard
|
impl<N: RealField> Distribution<Orthographic3<N>> for Standard
|
||||||
where
|
where
|
||||||
Standard: Distribution<N>,
|
Standard: Distribution<N>,
|
||||||
{
|
{
|
||||||
fn sample<R: Rng + ?Sized>(&self, r: &mut R) -> Orthographic3<N> {
|
fn sample<R: Rng + ?Sized>(&self, r: &mut R) -> Orthographic3<N> {
|
||||||
|
use crate::base::helper;
|
||||||
let left = r.gen();
|
let left = r.gen();
|
||||||
let right = helper::reject_rand(r, |x: &N| *x > left);
|
let right = helper::reject_rand(r, |x: &N| *x > left);
|
||||||
let bottom = r.gen();
|
let bottom = r.gen();
|
||||||
@ -706,6 +710,7 @@ where
|
|||||||
Matrix4<N>: Send,
|
Matrix4<N>: Send,
|
||||||
{
|
{
|
||||||
fn arbitrary(g: &mut Gen) -> Self {
|
fn arbitrary(g: &mut Gen) -> Self {
|
||||||
|
use crate::base::helper;
|
||||||
let left = Arbitrary::arbitrary(g);
|
let left = Arbitrary::arbitrary(g);
|
||||||
let right = helper::reject(g, |x: &N| *x > left);
|
let right = helper::reject(g, |x: &N| *x > left);
|
||||||
let bottom = Arbitrary::arbitrary(g);
|
let bottom = Arbitrary::arbitrary(g);
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
#[cfg(feature = "arbitrary")]
|
#[cfg(feature = "arbitrary")]
|
||||||
use quickcheck::{Arbitrary, Gen};
|
use quickcheck::{Arbitrary, Gen};
|
||||||
use rand::distributions::{Distribution, Standard};
|
#[cfg(feature = "rand-no-std")]
|
||||||
use rand::Rng;
|
use rand::{
|
||||||
|
distributions::{Distribution, Standard},
|
||||||
|
Rng,
|
||||||
|
};
|
||||||
|
|
||||||
#[cfg(feature = "serde-serialize")]
|
#[cfg(feature = "serde-serialize")]
|
||||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||||
@ -11,7 +14,6 @@ use std::mem;
|
|||||||
use simba::scalar::RealField;
|
use simba::scalar::RealField;
|
||||||
|
|
||||||
use crate::base::dimension::U3;
|
use crate::base::dimension::U3;
|
||||||
use crate::base::helper;
|
|
||||||
use crate::base::storage::Storage;
|
use crate::base::storage::Storage;
|
||||||
use crate::base::{Matrix4, Scalar, Vector, Vector3};
|
use crate::base::{Matrix4, Scalar, Vector, Vector3};
|
||||||
|
|
||||||
@ -268,11 +270,13 @@ impl<N: RealField> Perspective3<N> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "rand-no-std")]
|
||||||
impl<N: RealField> Distribution<Perspective3<N>> for Standard
|
impl<N: RealField> Distribution<Perspective3<N>> for Standard
|
||||||
where
|
where
|
||||||
Standard: Distribution<N>,
|
Standard: Distribution<N>,
|
||||||
{
|
{
|
||||||
fn sample<'a, R: Rng + ?Sized>(&self, r: &'a mut R) -> Perspective3<N> {
|
fn sample<'a, R: Rng + ?Sized>(&self, r: &'a mut R) -> Perspective3<N> {
|
||||||
|
use crate::base::helper;
|
||||||
let znear = r.gen();
|
let znear = r.gen();
|
||||||
let zfar = helper::reject_rand(r, |&x: &N| !(x - znear).is_zero());
|
let zfar = helper::reject_rand(r, |&x: &N| !(x - znear).is_zero());
|
||||||
let aspect = helper::reject_rand(r, |&x: &N| !x.is_zero());
|
let aspect = helper::reject_rand(r, |&x: &N| !x.is_zero());
|
||||||
@ -284,6 +288,7 @@ where
|
|||||||
#[cfg(feature = "arbitrary")]
|
#[cfg(feature = "arbitrary")]
|
||||||
impl<N: RealField + Arbitrary> Arbitrary for Perspective3<N> {
|
impl<N: RealField + Arbitrary> Arbitrary for Perspective3<N> {
|
||||||
fn arbitrary(g: &mut Gen) -> Self {
|
fn arbitrary(g: &mut Gen) -> Self {
|
||||||
|
use crate::base::helper;
|
||||||
let znear = Arbitrary::arbitrary(g);
|
let znear = Arbitrary::arbitrary(g);
|
||||||
let zfar = helper::reject(g, |&x: &N| !(x - znear).is_zero());
|
let zfar = helper::reject(g, |&x: &N| !(x - znear).is_zero());
|
||||||
let aspect = helper::reject(g, |&x: &N| !x.is_zero());
|
let aspect = helper::reject(g, |&x: &N| !x.is_zero());
|
||||||
|
@ -2,8 +2,11 @@
|
|||||||
use quickcheck::{Arbitrary, Gen};
|
use quickcheck::{Arbitrary, Gen};
|
||||||
|
|
||||||
use num::{Bounded, One, Zero};
|
use num::{Bounded, One, Zero};
|
||||||
use rand::distributions::{Distribution, Standard};
|
#[cfg(feature = "rand-no-std")]
|
||||||
use rand::Rng;
|
use rand::{
|
||||||
|
distributions::{Distribution, Standard},
|
||||||
|
Rng,
|
||||||
|
};
|
||||||
|
|
||||||
use crate::base::allocator::Allocator;
|
use crate::base::allocator::Allocator;
|
||||||
use crate::base::dimension::{DimName, DimNameAdd, DimNameSum, U1};
|
use crate::base::dimension::{DimName, DimNameAdd, DimNameSum, U1};
|
||||||
@ -138,6 +141,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "rand-no-std")]
|
||||||
impl<N: Scalar, D: DimName> Distribution<Point<N, D>> for Standard
|
impl<N: Scalar, D: DimName> Distribution<Point<N, D>> for Standard
|
||||||
where
|
where
|
||||||
DefaultAllocator: Allocator<N, D>,
|
DefaultAllocator: Allocator<N, D>,
|
||||||
|
@ -5,9 +5,13 @@ use crate::base::storage::Owned;
|
|||||||
#[cfg(feature = "arbitrary")]
|
#[cfg(feature = "arbitrary")]
|
||||||
use quickcheck::{Arbitrary, Gen};
|
use quickcheck::{Arbitrary, Gen};
|
||||||
|
|
||||||
|
#[cfg(feature = "rand-no-std")]
|
||||||
|
use rand::{
|
||||||
|
distributions::{Distribution, OpenClosed01, Standard},
|
||||||
|
Rng,
|
||||||
|
};
|
||||||
|
|
||||||
use num::{One, Zero};
|
use num::{One, Zero};
|
||||||
use rand::distributions::{Distribution, OpenClosed01, Standard};
|
|
||||||
use rand::Rng;
|
|
||||||
|
|
||||||
use simba::scalar::RealField;
|
use simba::scalar::RealField;
|
||||||
use simba::simd::SimdBool;
|
use simba::simd::SimdBool;
|
||||||
@ -144,6 +148,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "rand-no-std")]
|
||||||
impl<N: SimdRealField> Distribution<Quaternion<N>> for Standard
|
impl<N: SimdRealField> Distribution<Quaternion<N>> for Standard
|
||||||
where
|
where
|
||||||
Standard: Distribution<N>,
|
Standard: Distribution<N>,
|
||||||
@ -812,6 +817,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "rand-no-std")]
|
||||||
impl<N: SimdRealField> Distribution<UnitQuaternion<N>> for Standard
|
impl<N: SimdRealField> Distribution<UnitQuaternion<N>> for Standard
|
||||||
where
|
where
|
||||||
N::Element: SimdRealField,
|
N::Element: SimdRealField,
|
||||||
|
@ -4,8 +4,13 @@ use crate::base::storage::Owned;
|
|||||||
use quickcheck::{Arbitrary, Gen};
|
use quickcheck::{Arbitrary, Gen};
|
||||||
|
|
||||||
use num::Zero;
|
use num::Zero;
|
||||||
use rand::distributions::{Distribution, OpenClosed01, Standard};
|
|
||||||
use rand::Rng;
|
#[cfg(feature = "rand-no-std")]
|
||||||
|
use rand::{
|
||||||
|
distributions::{Distribution, OpenClosed01, Standard},
|
||||||
|
Rng,
|
||||||
|
};
|
||||||
|
|
||||||
use simba::scalar::RealField;
|
use simba::scalar::RealField;
|
||||||
use simba::simd::{SimdBool, SimdRealField};
|
use simba::simd::{SimdBool, SimdRealField};
|
||||||
use std::ops::Neg;
|
use std::ops::Neg;
|
||||||
@ -256,6 +261,7 @@ impl<N: SimdRealField> Rotation2<N> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "rand-no-std")]
|
||||||
impl<N: SimdRealField> Distribution<Rotation2<N>> for Standard
|
impl<N: SimdRealField> Distribution<Rotation2<N>> for Standard
|
||||||
where
|
where
|
||||||
N::Element: SimdRealField,
|
N::Element: SimdRealField,
|
||||||
@ -912,6 +918,7 @@ impl<N: SimdRealField> Rotation3<N> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "rand-no-std")]
|
||||||
impl<N: SimdRealField> Distribution<Rotation3<N>> for Standard
|
impl<N: SimdRealField> Distribution<Rotation3<N>> for Standard
|
||||||
where
|
where
|
||||||
N::Element: SimdRealField,
|
N::Element: SimdRealField,
|
||||||
|
@ -4,10 +4,12 @@ use crate::base::storage::Owned;
|
|||||||
use quickcheck::{Arbitrary, Gen};
|
use quickcheck::{Arbitrary, Gen};
|
||||||
|
|
||||||
use num::One;
|
use num::One;
|
||||||
use rand::distributions::{Distribution, Standard};
|
#[cfg(feature = "rand-no-std")]
|
||||||
use rand::Rng;
|
use rand::{
|
||||||
|
distributions::{Distribution, Standard},
|
||||||
|
Rng,
|
||||||
|
};
|
||||||
|
|
||||||
use simba::scalar::RealField;
|
|
||||||
use simba::simd::SimdRealField;
|
use simba::simd::SimdRealField;
|
||||||
|
|
||||||
use crate::base::allocator::Allocator;
|
use crate::base::allocator::Allocator;
|
||||||
@ -59,7 +61,8 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<N: RealField, D: DimName, R> Distribution<Similarity<N, D, R>> for Standard
|
#[cfg(feature = "rand-no-std")]
|
||||||
|
impl<N: crate::RealField, D: DimName, R> Distribution<Similarity<N, D, R>> for Standard
|
||||||
where
|
where
|
||||||
R: AbstractRotation<N, D>,
|
R: AbstractRotation<N, D>,
|
||||||
DefaultAllocator: Allocator<N, D>,
|
DefaultAllocator: Allocator<N, D>,
|
||||||
@ -107,8 +110,8 @@ where
|
|||||||
#[cfg(feature = "arbitrary")]
|
#[cfg(feature = "arbitrary")]
|
||||||
impl<N, D: DimName, R> Arbitrary for Similarity<N, D, R>
|
impl<N, D: DimName, R> Arbitrary for Similarity<N, D, R>
|
||||||
where
|
where
|
||||||
N: RealField + Arbitrary + Send,
|
N: crate::RealField + Arbitrary + Send,
|
||||||
N::Element: RealField,
|
N::Element: crate::RealField,
|
||||||
R: AbstractRotation<N, D> + Arbitrary + Send,
|
R: AbstractRotation<N, D> + Arbitrary + Send,
|
||||||
DefaultAllocator: Allocator<N, D>,
|
DefaultAllocator: Allocator<N, D>,
|
||||||
Owned<N, D>: Send,
|
Owned<N, D>: Send,
|
||||||
|
@ -4,8 +4,11 @@ use crate::base::storage::Owned;
|
|||||||
use quickcheck::{Arbitrary, Gen};
|
use quickcheck::{Arbitrary, Gen};
|
||||||
|
|
||||||
use num::{One, Zero};
|
use num::{One, Zero};
|
||||||
use rand::distributions::{Distribution, Standard};
|
#[cfg(feature = "rand-no-std")]
|
||||||
use rand::Rng;
|
use rand::{
|
||||||
|
distributions::{Distribution, Standard},
|
||||||
|
Rng,
|
||||||
|
};
|
||||||
|
|
||||||
use simba::scalar::ClosedAdd;
|
use simba::scalar::ClosedAdd;
|
||||||
|
|
||||||
@ -49,6 +52,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "rand-no-std")]
|
||||||
impl<N: Scalar, D: DimName> Distribution<Translation<N, D>> for Standard
|
impl<N: Scalar, D: DimName> Distribution<Translation<N, D>> for Standard
|
||||||
where
|
where
|
||||||
DefaultAllocator: Allocator<N, D>,
|
DefaultAllocator: Allocator<N, D>,
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
#[cfg(feature = "arbitrary")]
|
#[cfg(feature = "arbitrary")]
|
||||||
use quickcheck::{Arbitrary, Gen};
|
use quickcheck::{Arbitrary, Gen};
|
||||||
|
|
||||||
|
#[cfg(feature = "rand-no-std")]
|
||||||
|
use rand::{
|
||||||
|
distributions::{Distribution, OpenClosed01, Standard},
|
||||||
|
Rng,
|
||||||
|
};
|
||||||
|
|
||||||
use num::One;
|
use num::One;
|
||||||
use num_complex::Complex;
|
use num_complex::Complex;
|
||||||
use rand::distributions::{Distribution, OpenClosed01, Standard};
|
|
||||||
use rand::Rng;
|
|
||||||
|
|
||||||
use crate::base::dimension::{U1, U2};
|
use crate::base::dimension::{U1, U2};
|
||||||
use crate::base::storage::Storage;
|
use crate::base::storage::Storage;
|
||||||
@ -377,6 +381,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "rand-no-std")]
|
||||||
impl<N: SimdRealField> Distribution<UnitComplex<N>> for Standard
|
impl<N: SimdRealField> Distribution<UnitComplex<N>> for Standard
|
||||||
where
|
where
|
||||||
N::Element: SimdRealField,
|
N::Element: SimdRealField,
|
||||||
|
14
src/lib.rs
14
src/lib.rs
@ -89,26 +89,16 @@ an optimized set of tools for computer graphics and physics. Those features incl
|
|||||||
#![cfg_attr(all(feature = "alloc", not(feature = "std")), feature(alloc))]
|
#![cfg_attr(all(feature = "alloc", not(feature = "std")), feature(alloc))]
|
||||||
#![cfg_attr(feature = "no_unsound_assume_init", allow(unreachable_code))]
|
#![cfg_attr(feature = "no_unsound_assume_init", allow(unreachable_code))]
|
||||||
|
|
||||||
#[cfg(feature = "arbitrary")]
|
|
||||||
extern crate quickcheck;
|
|
||||||
|
|
||||||
#[cfg(feature = "serde-serialize")]
|
#[cfg(feature = "serde-serialize")]
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate serde;
|
extern crate serde;
|
||||||
|
|
||||||
#[cfg(feature = "abomonation-serialize")]
|
#[cfg(feature = "rand-no-std")]
|
||||||
extern crate abomonation;
|
extern crate rand_package as rand;
|
||||||
|
|
||||||
#[cfg(feature = "mint")]
|
|
||||||
extern crate mint;
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate approx;
|
extern crate approx;
|
||||||
#[cfg(feature = "std")]
|
|
||||||
extern crate matrixmultiply;
|
|
||||||
extern crate num_traits as num;
|
extern crate num_traits as num;
|
||||||
#[cfg(feature = "std")]
|
|
||||||
extern crate rand_distr;
|
|
||||||
|
|
||||||
#[cfg(all(feature = "alloc", not(feature = "std")))]
|
#[cfg(all(feature = "alloc", not(feature = "std")))]
|
||||||
extern crate alloc;
|
extern crate alloc;
|
||||||
|
13
tests/lib.rs
13
tests/lib.rs
@ -1,17 +1,20 @@
|
|||||||
#[cfg(any(not(feature = "debug"), not(feature = "compare")))]
|
#[cfg(any(
|
||||||
|
not(feature = "debug"),
|
||||||
|
not(feature = "compare"),
|
||||||
|
not(feature = "rand")
|
||||||
|
))]
|
||||||
compile_error!(
|
compile_error!(
|
||||||
"Please enable the `debug` and `compare` features in order to compile and run the tests.
|
"Please enable the `debug`, `compare`, and `rand` features in order to compile and run the tests.
|
||||||
Example: `cargo test --features debug --features compare`"
|
Example: `cargo test --features debug,compare,rand`"
|
||||||
);
|
);
|
||||||
|
|
||||||
#[cfg(feature = "abomonation-serialize")]
|
#[cfg(feature = "abomonation-serialize")]
|
||||||
extern crate abomonation;
|
extern crate abomonation;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate approx;
|
extern crate approx;
|
||||||
#[cfg(feature = "mint")]
|
|
||||||
extern crate mint;
|
|
||||||
extern crate nalgebra as na;
|
extern crate nalgebra as na;
|
||||||
extern crate num_traits as num;
|
extern crate num_traits as num;
|
||||||
|
extern crate rand_package as rand;
|
||||||
|
|
||||||
mod core;
|
mod core;
|
||||||
mod geometry;
|
mod geometry;
|
||||||
|
Loading…
Reference in New Issue
Block a user