diff --git a/src/comp/rustc.rc b/src/comp/rustc.rc index aeb8fdd1790..cce0d38fc37 100644 --- a/src/comp/rustc.rc +++ b/src/comp/rustc.rc @@ -28,7 +28,6 @@ mod driver { mod util { mod common; - mod bits; } auth driver.rustc.main = state; diff --git a/src/comp/util/bits.rs b/src/lib/bitv.rs similarity index 99% rename from src/comp/util/bits.rs rename to src/lib/bitv.rs index 3c73c1533a1..9ae3a2cef25 100644 --- a/src/comp/util/bits.rs +++ b/src/lib/bitv.rs @@ -25,8 +25,8 @@ fn create(uint nbits, bool init) -> t { elt = 0u; } - ret rec(storage = _vec.init_elt[mutable uint](elt, nbits / uint_bits() + 1u), - nbits = nbits); + auto storage = _vec.init_elt[mutable uint](elt, nbits / uint_bits() + 1u); + ret rec(storage = storage, nbits = nbits); } fn process(&fn(uint, uint) -> uint op, &t v0, &t v1) -> bool { diff --git a/src/lib/std.rc b/src/lib/std.rc index 3b7440c1dab..16cfbb7530d 100644 --- a/src/lib/std.rc +++ b/src/lib/std.rc @@ -53,6 +53,7 @@ mod deque; mod list; mod rand; mod dbg; +mod bitv; // Local Variables: // mode: rust; diff --git a/src/test/run-pass/lib-bitv.rs b/src/test/run-pass/lib-bitv.rs new file mode 100644 index 00000000000..162e8b13293 --- /dev/null +++ b/src/test/run-pass/lib-bitv.rs @@ -0,0 +1,297 @@ +use std; +import std._vec; +import std.bitv; + +fn test_0_elements() { + auto act; + auto exp; + + act = bitv.create(0u, false); + exp = _vec.init_elt[uint](0u, 0u); + // FIXME: why can't I write vec[uint]()? + check (bitv.eq_vec(act, exp)); +} + +fn test_1_element() { + auto act; + + act = bitv.create(1u, false); + check (bitv.eq_vec(act, vec(0u))); + + act = bitv.create(1u, true); + check (bitv.eq_vec(act, vec(1u))); +} + +fn test_10_elements() { + auto act; + + // all 0 + act = bitv.create(10u, false); + check (bitv.eq_vec(act, vec(0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u))); + + // all 1 + act = bitv.create(10u, true); + check (bitv.eq_vec(act, vec(1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u))); + + // mixed + act = bitv.create(10u, false); + bitv.set(act, 0u, true); + bitv.set(act, 1u, true); + bitv.set(act, 2u, true); + bitv.set(act, 3u, true); + bitv.set(act, 4u, true); + check (bitv.eq_vec(act, vec(1u, 1u, 1u, 1u, 1u, 0u, 0u, 0u, 0u, 0u))); + + // mixed + act = bitv.create(10u, false); + bitv.set(act, 5u, true); + bitv.set(act, 6u, true); + bitv.set(act, 7u, true); + bitv.set(act, 8u, true); + bitv.set(act, 9u, true); + check (bitv.eq_vec(act, vec(0u, 0u, 0u, 0u, 0u, 1u, 1u, 1u, 1u, 1u))); + + // mixed + act = bitv.create(10u, false); + bitv.set(act, 0u, true); + bitv.set(act, 3u, true); + bitv.set(act, 6u, true); + bitv.set(act, 9u, true); + check (bitv.eq_vec(act, vec(1u, 0u, 0u, 1u, 0u, 0u, 1u, 0u, 0u, 1u))); +} + +fn test_31_elements() { + auto act; + + // all 0 + act = bitv.create(31u, false); + check (bitv.eq_vec(act, vec(0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u))); + + // all 1 + act = bitv.create(31u, true); + check (bitv.eq_vec(act, vec(1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, + 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, + 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, + 1u, 1u, 1u, 1u, 1u, 1u, 1u))); + + // mixed + act = bitv.create(31u, false); + bitv.set(act, 0u, true); + bitv.set(act, 1u, true); + bitv.set(act, 2u, true); + bitv.set(act, 3u, true); + bitv.set(act, 4u, true); + bitv.set(act, 5u, true); + bitv.set(act, 6u, true); + bitv.set(act, 7u, true); + check (bitv.eq_vec(act, vec(1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u))); + + // mixed + act = bitv.create(31u, false); + bitv.set(act, 16u, true); + bitv.set(act, 17u, true); + bitv.set(act, 18u, true); + bitv.set(act, 19u, true); + bitv.set(act, 20u, true); + bitv.set(act, 21u, true); + bitv.set(act, 22u, true); + bitv.set(act, 23u, true); + check (bitv.eq_vec(act, vec(0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u))); + + // mixed + act = bitv.create(31u, false); + bitv.set(act, 24u, true); + bitv.set(act, 25u, true); + bitv.set(act, 26u, true); + bitv.set(act, 27u, true); + bitv.set(act, 28u, true); + bitv.set(act, 29u, true); + bitv.set(act, 30u, true); + check (bitv.eq_vec(act, vec(0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 1u, 1u, 1u, 1u, 1u, 1u, 1u))); + + // mixed + act = bitv.create(31u, false); + bitv.set(act, 3u, true); + bitv.set(act, 17u, true); + bitv.set(act, 30u, true); + check (bitv.eq_vec(act, vec(0u, 0u, 0u, 1u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 1u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 1u))); +} + +fn test_32_elements() { + auto act; + + // all 0 + act = bitv.create(32u, false); + check (bitv.eq_vec(act, vec(0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u))); + + // all 1 + act = bitv.create(32u, true); + check (bitv.eq_vec(act, vec(1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, + 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, + 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, + 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u))); + + // mixed + act = bitv.create(32u, false); + bitv.set(act, 0u, true); + bitv.set(act, 1u, true); + bitv.set(act, 2u, true); + bitv.set(act, 3u, true); + bitv.set(act, 4u, true); + bitv.set(act, 5u, true); + bitv.set(act, 6u, true); + bitv.set(act, 7u, true); + check (bitv.eq_vec(act, vec(1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u))); + + // mixed + act = bitv.create(32u, false); + bitv.set(act, 16u, true); + bitv.set(act, 17u, true); + bitv.set(act, 18u, true); + bitv.set(act, 19u, true); + bitv.set(act, 20u, true); + bitv.set(act, 21u, true); + bitv.set(act, 22u, true); + bitv.set(act, 23u, true); + check (bitv.eq_vec(act, vec(0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u))); + + // mixed + act = bitv.create(32u, false); + bitv.set(act, 24u, true); + bitv.set(act, 25u, true); + bitv.set(act, 26u, true); + bitv.set(act, 27u, true); + bitv.set(act, 28u, true); + bitv.set(act, 29u, true); + bitv.set(act, 30u, true); + bitv.set(act, 31u, true); + check (bitv.eq_vec(act, vec(0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u))); + + // mixed + act = bitv.create(32u, false); + bitv.set(act, 3u, true); + bitv.set(act, 17u, true); + bitv.set(act, 30u, true); + bitv.set(act, 31u, true); + check (bitv.eq_vec(act, vec(0u, 0u, 0u, 1u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 1u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 1u, 1u))); +} + +fn test_33_elements() { + auto act; + + // all 0 + act = bitv.create(33u, false); + check (bitv.eq_vec(act, vec(0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u))); + + // all 1 + act = bitv.create(33u, true); + check (bitv.eq_vec(act, vec(1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, + 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, + 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, + 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, + 1u))); + + // mixed + act = bitv.create(33u, false); + bitv.set(act, 0u, true); + bitv.set(act, 1u, true); + bitv.set(act, 2u, true); + bitv.set(act, 3u, true); + bitv.set(act, 4u, true); + bitv.set(act, 5u, true); + bitv.set(act, 6u, true); + bitv.set(act, 7u, true); + check (bitv.eq_vec(act, vec(1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u))); + + // mixed + act = bitv.create(33u, false); + bitv.set(act, 16u, true); + bitv.set(act, 17u, true); + bitv.set(act, 18u, true); + bitv.set(act, 19u, true); + bitv.set(act, 20u, true); + bitv.set(act, 21u, true); + bitv.set(act, 22u, true); + bitv.set(act, 23u, true); + check (bitv.eq_vec(act, vec(0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u))); + + // mixed + act = bitv.create(33u, false); + bitv.set(act, 24u, true); + bitv.set(act, 25u, true); + bitv.set(act, 26u, true); + bitv.set(act, 27u, true); + bitv.set(act, 28u, true); + bitv.set(act, 29u, true); + bitv.set(act, 30u, true); + bitv.set(act, 31u, true); + check (bitv.eq_vec(act, vec(0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, + 0u))); + + // mixed + act = bitv.create(33u, false); + bitv.set(act, 3u, true); + bitv.set(act, 17u, true); + bitv.set(act, 30u, true); + bitv.set(act, 31u, true); + bitv.set(act, 32u, true); + check (bitv.eq_vec(act, vec(0u, 0u, 0u, 1u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 1u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u, 1u, 1u, + 1u))); +} + +fn main() { + test_0_elements(); + test_1_element(); + test_10_elements(); + test_31_elements(); + test_32_elements(); + test_33_elements(); +}