diff --git a/src/lib/bitv.rs b/src/lib/bitv.rs index f922789e9f0..759c9b24d48 100644 --- a/src/lib/bitv.rs +++ b/src/lib/bitv.rs @@ -14,9 +14,9 @@ export difference; export set; export is_true; export is_false; -export to_vec; +export to_ivec; export to_str; -export eq_vec; +export eq_ivec; // FIXME: With recursive object types, we could implement binary methods like @@ -145,11 +145,6 @@ fn is_false(v: &t) -> bool { fn init_to_vec(v: t, i: uint) -> uint { ret if get(v, i) { 1u } else { 0u }; } -fn to_vec(v: &t) -> vec[uint] { - let sub = bind init_to_vec(v, _); - ret vec::init_fn[uint](sub, v.nbits); -} - fn to_ivec(v: &t) -> [uint] { let sub = bind init_to_vec(v, _); ret ivec::init_fn[uint](sub, v.nbits); @@ -157,27 +152,12 @@ fn to_ivec(v: &t) -> [uint] { fn to_str(v: &t) -> str { let rs = ""; - for i: uint in bitv::to_vec(v) { + for i: uint in to_ivec(v) { if i == 1u { rs += "1"; } else { rs += "0"; } } ret rs; } - -// FIXME: can we just use structural equality on to_vec? -fn eq_vec(v0: &t, v1: &vec[uint]) -> bool { - assert (v0.nbits == vec::len[uint](v1)); - let len = v0.nbits; - let i = 0u; - while i < len { - let w0 = get(v0, i); - let w1 = v1.(i); - if !w0 && w1 != 0u || w0 && w1 == 0u { ret false; } - i = i + 1u; - } - ret true; -} - fn eq_ivec(v0: &t, v1: &[uint]) -> bool { assert (v0.nbits == ivec::len[uint](v1)); let len = v0.nbits; diff --git a/src/test/stdtest/bitv.rs b/src/test/stdtest/bitv.rs index 2cf8a79edb4..0e0aaeaaf89 100644 --- a/src/test/stdtest/bitv.rs +++ b/src/test/stdtest/bitv.rs @@ -1,6 +1,6 @@ use std; -import std::vec; +import std::ivec; import std::bitv; #[test] @@ -8,19 +8,19 @@ fn test_0_elements() { let act; let exp; act = bitv::create(0u, false); - exp = vec::init_elt[uint](0u, 0u); + exp = ivec::init_elt[uint](0u, 0u); // FIXME: why can't I write vec[uint]()? - assert (bitv::eq_vec(act, exp)); + assert (bitv::eq_ivec(act, exp)); } #[test] fn test_1_element() { let act; act = bitv::create(1u, false); - assert (bitv::eq_vec(act, [0u])); + assert (bitv::eq_ivec(act, ~[0u])); act = bitv::create(1u, true); - assert (bitv::eq_vec(act, [1u])); + assert (bitv::eq_ivec(act, ~[1u])); } #[test] @@ -29,11 +29,11 @@ fn test_10_elements() { // all 0 act = bitv::create(10u, false); - assert (bitv::eq_vec(act, [0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u])); + assert (bitv::eq_ivec(act, ~[0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u])); // all 1 act = bitv::create(10u, true); - assert (bitv::eq_vec(act, [1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u])); + assert (bitv::eq_ivec(act, ~[1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u])); // mixed act = bitv::create(10u, false); @@ -42,7 +42,7 @@ fn test_10_elements() { bitv::set(act, 2u, true); bitv::set(act, 3u, true); bitv::set(act, 4u, true); - assert (bitv::eq_vec(act, [1u, 1u, 1u, 1u, 1u, 0u, 0u, 0u, 0u, 0u])); + assert (bitv::eq_ivec(act, ~[1u, 1u, 1u, 1u, 1u, 0u, 0u, 0u, 0u, 0u])); // mixed act = bitv::create(10u, false); @@ -51,7 +51,7 @@ fn test_10_elements() { bitv::set(act, 7u, true); bitv::set(act, 8u, true); bitv::set(act, 9u, true); - assert (bitv::eq_vec(act, [0u, 0u, 0u, 0u, 0u, 1u, 1u, 1u, 1u, 1u])); + assert (bitv::eq_ivec(act, ~[0u, 0u, 0u, 0u, 0u, 1u, 1u, 1u, 1u, 1u])); // mixed act = bitv::create(10u, false); @@ -59,7 +59,7 @@ fn test_10_elements() { bitv::set(act, 3u, true); bitv::set(act, 6u, true); bitv::set(act, 9u, true); - assert (bitv::eq_vec(act, [1u, 0u, 0u, 1u, 0u, 0u, 1u, 0u, 0u, 1u])); + assert (bitv::eq_ivec(act, ~[1u, 0u, 0u, 1u, 0u, 0u, 1u, 0u, 0u, 1u])); } #[test] @@ -68,17 +68,17 @@ fn test_31_elements() { // all 0 act = bitv::create(31u, false); - assert (bitv::eq_vec(act, - [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])); + assert (bitv::eq_ivec(act, + ~[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); - assert (bitv::eq_vec(act, - [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])); + assert (bitv::eq_ivec(act, + ~[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); @@ -90,10 +90,10 @@ fn test_31_elements() { bitv::set(act, 5u, true); bitv::set(act, 6u, true); bitv::set(act, 7u, true); - assert (bitv::eq_vec(act, - [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])); + assert (bitv::eq_ivec(act, + ~[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); @@ -105,10 +105,10 @@ fn test_31_elements() { bitv::set(act, 21u, true); bitv::set(act, 22u, true); bitv::set(act, 23u, true); - assert (bitv::eq_vec(act, - [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])); + assert (bitv::eq_ivec(act, + ~[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); @@ -119,20 +119,20 @@ fn test_31_elements() { bitv::set(act, 28u, true); bitv::set(act, 29u, true); bitv::set(act, 30u, true); - assert (bitv::eq_vec(act, - [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])); + assert (bitv::eq_ivec(act, + ~[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); - assert (bitv::eq_vec(act, - [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])); + assert (bitv::eq_ivec(act, + ~[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])); } #[test] @@ -141,17 +141,17 @@ fn test_32_elements() { // all 0 act = bitv::create(32u, false); - assert (bitv::eq_vec(act, - [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])); + assert (bitv::eq_ivec(act, + ~[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); - assert (bitv::eq_vec(act, - [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])); + assert (bitv::eq_ivec(act, + ~[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); @@ -163,10 +163,10 @@ fn test_32_elements() { bitv::set(act, 5u, true); bitv::set(act, 6u, true); bitv::set(act, 7u, true); - assert (bitv::eq_vec(act, - [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])); + assert (bitv::eq_ivec(act, + ~[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); @@ -178,10 +178,10 @@ fn test_32_elements() { bitv::set(act, 21u, true); bitv::set(act, 22u, true); bitv::set(act, 23u, true); - assert (bitv::eq_vec(act, - [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])); + assert (bitv::eq_ivec(act, + ~[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); @@ -193,10 +193,10 @@ fn test_32_elements() { bitv::set(act, 29u, true); bitv::set(act, 30u, true); bitv::set(act, 31u, true); - assert (bitv::eq_vec(act, - [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])); + assert (bitv::eq_ivec(act, + ~[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); @@ -204,10 +204,10 @@ fn test_32_elements() { bitv::set(act, 17u, true); bitv::set(act, 30u, true); bitv::set(act, 31u, true); - assert (bitv::eq_vec(act, - [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])); + assert (bitv::eq_ivec(act, + ~[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])); } #[test] @@ -216,17 +216,17 @@ fn test_33_elements() { // all 0 act = bitv::create(33u, false); - assert (bitv::eq_vec(act, - [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])); + assert (bitv::eq_ivec(act, + ~[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); - assert (bitv::eq_vec(act, - [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])); + assert (bitv::eq_ivec(act, + ~[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); @@ -238,10 +238,10 @@ fn test_33_elements() { bitv::set(act, 5u, true); bitv::set(act, 6u, true); bitv::set(act, 7u, true); - assert (bitv::eq_vec(act, - [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])); + assert (bitv::eq_ivec(act, + ~[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); @@ -253,10 +253,10 @@ fn test_33_elements() { bitv::set(act, 21u, true); bitv::set(act, 22u, true); bitv::set(act, 23u, true); - assert (bitv::eq_vec(act, - [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])); + assert (bitv::eq_ivec(act, + ~[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); @@ -268,10 +268,10 @@ fn test_33_elements() { bitv::set(act, 29u, true); bitv::set(act, 30u, true); bitv::set(act, 31u, true); - assert (bitv::eq_vec(act, - [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])); + assert (bitv::eq_ivec(act, + ~[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); @@ -280,9 +280,9 @@ fn test_33_elements() { bitv::set(act, 30u, true); bitv::set(act, 31u, true); bitv::set(act, 32u, true); - assert (bitv::eq_vec(act, - [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])); + assert (bitv::eq_ivec(act, + ~[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])); }