aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/comp/rustc.rc1
-rw-r--r--src/lib/bitv.rs (renamed from src/comp/util/bits.rs)4
-rw-r--r--src/lib/std.rc1
-rw-r--r--src/test/run-pass/lib-bitv.rs297
4 files changed, 300 insertions, 3 deletions
diff --git a/src/comp/rustc.rc b/src/comp/rustc.rc
index aeb8fdd1..cce0d38f 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
index 3c73c153..9ae3a2ce 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 3b7440c1..16cfbb75 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 00000000..162e8b13
--- /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();
+}