Skip to content

Commit a67ea7a

Browse files
committed
Introduce the std feature
So far, it only toggles whether to build with `#![no_std]`.
1 parent fdd2874 commit a67ea7a

File tree

4 files changed

+72
-39
lines changed

4 files changed

+72
-39
lines changed

Cargo.toml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,13 @@ readme = "README.md"
1414
[dependencies]
1515

1616
[dependencies.num-integer]
17-
version = "0.1.32"
17+
version = "0.1.36"
18+
default-features = false
1819

1920
[dependencies.num-traits]
20-
version = "0.1.32"
21+
version = "0.2.0"
22+
default-features = false
23+
24+
[features]
25+
default = ["std"]
26+
std = []

README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,20 @@ and this to your crate root:
2222
extern crate num_iter;
2323
```
2424

25+
## Features
26+
27+
This crate can be used without the standard library (`#![no_std]`) by disabling
28+
the default `std` feature. Use this in `Cargo.toml`:
29+
30+
```toml
31+
[dependencies.num-iter]
32+
version = "0.1.35"
33+
default-features = false
34+
```
35+
36+
There is no functional difference with and without `std` at this time, but
37+
there may be in the future.
38+
2539
## Compatibility
2640

2741
The `num-iter` crate is tested for rustc 1.8 and greater.

ci/test_full.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,6 @@ echo Testing num-iter on rustc ${TRAVIS_RUST_VERSION}
88
cargo build --verbose
99
cargo test --verbose
1010

11-
# We have no features to test...
11+
# test `no_std`
12+
cargo build --verbose --no-default-features
13+
cargo test --verbose --no-default-features

src/lib.rs

Lines changed: 47 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,16 @@
1616
1717
#![doc(html_root_url = "https://docs.rs/num-iter/0.1")]
1818

19+
#![cfg_attr(not(feature = "std"), no_std)]
20+
#[cfg(feature = "std")]
21+
extern crate core;
22+
1923
extern crate num_traits as traits;
2024
extern crate num_integer as integer;
2125

2226
use integer::Integer;
2327
use traits::{Zero, One, CheckedAdd, ToPrimitive};
24-
use std::ops::{Add, Sub};
28+
use core::ops::{Add, Sub};
2529

2630
/// An iterator over the range [start, stop)
2731
#[derive(Clone)]
@@ -266,9 +270,10 @@ impl<A> Iterator for RangeStepInclusive<A>
266270

267271
#[cfg(test)]
268272
mod tests {
269-
use std::usize;
270-
use std::ops::{Add, Mul};
271-
use std::cmp::Ordering;
273+
use core::usize;
274+
use core::ops::{Add, Mul};
275+
use core::cmp::Ordering;
276+
use core::iter;
272277
use traits::{One, ToPrimitive};
273278

274279
#[test]
@@ -321,10 +326,12 @@ mod tests {
321326
}
322327
}
323328

324-
assert!(super::range(0, 5).collect::<Vec<isize>>() == vec![0, 1, 2, 3, 4]);
325-
assert!(super::range(-10, -1).collect::<Vec<isize>>() ==
326-
vec![-10, -9, -8, -7, -6, -5, -4, -3, -2]);
327-
assert!(super::range(0, 5).rev().collect::<Vec<isize>>() == vec![4, 3, 2, 1, 0]);
329+
assert!(super::range(0, 5)
330+
.eq([0, 1, 2, 3, 4].iter().cloned()));
331+
assert!(super::range(-10, -1)
332+
.eq([-10, -9, -8, -7, -6, -5, -4, -3, -2].iter().cloned()));
333+
assert!(super::range(0, 5).rev()
334+
.eq([4, 3, 2, 1, 0].iter().cloned()));
328335
assert_eq!(super::range(200, -5).count(), 0);
329336
assert_eq!(super::range(200, -5).rev().count(), 0);
330337
assert_eq!(super::range(200, 200).count(), 0);
@@ -338,43 +345,47 @@ mod tests {
338345

339346
#[test]
340347
fn test_range_inclusive() {
341-
assert!(super::range_inclusive(0, 5).collect::<Vec<isize>>() ==
342-
vec![0, 1, 2, 3, 4, 5]);
343-
assert!(super::range_inclusive(0, 5).rev().collect::<Vec<isize>>() ==
344-
vec![5, 4, 3, 2, 1, 0]);
348+
assert!(super::range_inclusive(0, 5)
349+
.eq([0, 1, 2, 3, 4, 5].iter().cloned()));
350+
assert!(super::range_inclusive(0, 5).rev()
351+
.eq([5, 4, 3, 2, 1, 0].iter().cloned()));
345352
assert_eq!(super::range_inclusive(200, -5).count(), 0);
346353
assert_eq!(super::range_inclusive(200, -5).rev().count(), 0);
347-
assert!(super::range_inclusive(200, 200).collect::<Vec<isize>>() == vec![200]);
348-
assert!(super::range_inclusive(200, 200).rev().collect::<Vec<isize>>() == vec![200]);
354+
assert!(super::range_inclusive(200, 200)
355+
.eq(iter::once(200)));
356+
assert!(super::range_inclusive(200, 200).rev()
357+
.eq(iter::once(200)));
349358
}
350359

351360
#[test]
352361
fn test_range_step() {
353-
assert!(super::range_step(0, 20, 5).collect::<Vec<isize>>() ==
354-
vec![0, 5, 10, 15]);
355-
assert!(super::range_step(20, 0, -5).collect::<Vec<isize>>() ==
356-
vec![20, 15, 10, 5]);
357-
assert!(super::range_step(20, 0, -6).collect::<Vec<isize>>() ==
358-
vec![20, 14, 8, 2]);
359-
assert!(super::range_step(200u8, 255, 50).collect::<Vec<u8>>() ==
360-
vec![200u8, 250]);
361-
assert!(super::range_step(200, -5, 1).collect::<Vec<isize>>() == vec![]);
362-
assert!(super::range_step(200, 200, 1).collect::<Vec<isize>>() == vec![]);
362+
assert!(super::range_step(0, 20, 5)
363+
.eq([0, 5, 10, 15].iter().cloned()));
364+
assert!(super::range_step(20, 0, -5)
365+
.eq([20, 15, 10, 5].iter().cloned()));
366+
assert!(super::range_step(20, 0, -6)
367+
.eq([20, 14, 8, 2].iter().cloned()));
368+
assert!(super::range_step(200u8, 255, 50)
369+
.eq([200u8, 250].iter().cloned()));
370+
assert!(super::range_step(200, -5, 1)
371+
.eq(iter::empty()));
372+
assert!(super::range_step(200, 200, 1)
373+
.eq(iter::empty()));
363374
}
364375

365376
#[test]
366377
fn test_range_step_inclusive() {
367-
assert!(super::range_step_inclusive(0, 20, 5).collect::<Vec<isize>>() ==
368-
vec![0, 5, 10, 15, 20]);
369-
assert!(super::range_step_inclusive(20, 0, -5).collect::<Vec<isize>>() ==
370-
vec![20, 15, 10, 5, 0]);
371-
assert!(super::range_step_inclusive(20, 0, -6).collect::<Vec<isize>>() ==
372-
vec![20, 14, 8, 2]);
373-
assert!(super::range_step_inclusive(200u8, 255, 50).collect::<Vec<u8>>() ==
374-
vec![200u8, 250]);
375-
assert!(super::range_step_inclusive(200, -5, 1).collect::<Vec<isize>>() ==
376-
vec![]);
377-
assert!(super::range_step_inclusive(200, 200, 1).collect::<Vec<isize>>() ==
378-
vec![200]);
378+
assert!(super::range_step_inclusive(0, 20, 5)
379+
.eq([0, 5, 10, 15, 20].iter().cloned()));
380+
assert!(super::range_step_inclusive(20, 0, -5)
381+
.eq([20, 15, 10, 5, 0].iter().cloned()));
382+
assert!(super::range_step_inclusive(20, 0, -6)
383+
.eq([20, 14, 8, 2].iter().cloned()));
384+
assert!(super::range_step_inclusive(200u8, 255, 50)
385+
.eq([200u8, 250].iter().cloned()));
386+
assert!(super::range_step_inclusive(200, -5, 1)
387+
.eq(iter::empty()));
388+
assert!(super::range_step_inclusive(200, 200, 1)
389+
.eq(iter::once(200)));
379390
}
380391
}

0 commit comments

Comments
 (0)