diff options
Diffstat (limited to 'src/fuzzer/ivec_fuzz.rs')
| -rw-r--r-- | src/fuzzer/ivec_fuzz.rs | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/src/fuzzer/ivec_fuzz.rs b/src/fuzzer/ivec_fuzz.rs index 9ea4d888fb2..0f5e95a7d73 100644 --- a/src/fuzzer/ivec_fuzz.rs +++ b/src/fuzzer/ivec_fuzz.rs @@ -8,8 +8,8 @@ Idea: provide functions for 'exhaustive' and 'random' modification of vecs. It would be nice if this could be data-driven, so the two functions could share information: - type vec_modifier = rec(fn (<T> v, uint i) -> [T] fun, uint lo, uint di); - const [vec_modifier] vec_modifiers = ~[rec(fun=vec_omit, 0u, 1u), ...]; + type vec_modifier = rec(fn (<T> v, uint i) -> [T]/~ fun, uint lo, uint di); + const [vec_modifier]/~ vec_modifiers = ~[rec(fun=vec_omit, 0u, 1u), ...]/~; But that gives me "error: internal compiler error unimplemented consts that's not a plain literal". https://github.com/graydon/rust/issues/570 @@ -24,23 +24,23 @@ import vec::slice; import vec::len; import int; -fn vec_omit<T: copy>(v: [T], i: uint) -> [T] { +fn vec_omit<T: copy>(v: [T]/~, i: uint) -> [T]/~ { slice(v, 0u, i) + slice(v, i + 1u, len(v)) } -fn vec_dup<T: copy>(v: [T], i: uint) -> [T] { +fn vec_dup<T: copy>(v: [T]/~, i: uint) -> [T]/~ { slice(v, 0u, i) + [v[i]] + slice(v, i, len(v)) } -fn vec_swadj<T: copy>(v: [T], i: uint) -> [T] { +fn vec_swadj<T: copy>(v: [T]/~, i: uint) -> [T]/~ { slice(v, 0u, i) + [v[i + 1u], v[i]] + slice(v, i + 2u, len(v)) } -fn vec_prefix<T: copy>(v: [T], i: uint) -> [T] { slice(v, 0u, i) } -fn vec_suffix<T: copy>(v: [T], i: uint) -> [T] { slice(v, i, len(v)) } +fn vec_prefix<T: copy>(v: [T]/~, i: uint) -> [T]/~ { slice(v, 0u, i) } +fn vec_suffix<T: copy>(v: [T]/~, i: uint) -> [T]/~ { slice(v, i, len(v)) } -fn vec_poke<T: copy>(v: [T], i: uint, x: T) -> [T] { - slice(v, 0u, i) + [x] + slice(v, i + 1u, len(v)) +fn vec_poke<T: copy>(v: [T]/~, i: uint, x: T) -> [T]/~ { + slice(v, 0u, i) + [x]/~ + slice(v, i + 1u, len(v)) } -fn vec_insert<T: copy>(v: [T], i: uint, x: T) -> [T] { - slice(v, 0u, i) + [x] + slice(v, i, len(v)) +fn vec_insert<T: copy>(v: [T]/~, i: uint, x: T) -> [T]/~ { + slice(v, 0u, i) + [x]/~ + slice(v, i, len(v)) } // Iterates over 0...length, skipping the specified number on each side. @@ -51,23 +51,23 @@ fn ix(skip_low: uint, skip_high: uint, length: uint, it: block(uint)) { // Returns a bunch of modified versions of v, some of which introduce // new elements (borrowed from xs). -fn vec_edits<T: copy>(v: [T], xs: [T]) -> [[T]] { - let edits: [[T]] = []; +fn vec_edits<T: copy>(v: [T]/~, xs: [T]/~) -> [[T]/~]/~ { + let edits: [[T]/~]/~ = []/~; let Lv: uint = len(v); if Lv != 1u { // When Lv == 1u, this is redundant with omit. - vec::push(edits, []); + vec::push(edits, []/~); } if Lv >= 3u { // When Lv == 2u, this is redundant with swap. vec::push(edits, vec::reversed(v)); } - ix(0u, 1u, Lv) {|i| edits += [vec_omit(v, i)]; } - ix(0u, 1u, Lv) {|i| edits += [vec_dup(v, i)]; } - ix(0u, 2u, Lv) {|i| edits += [vec_swadj(v, i)]; } - ix(1u, 2u, Lv) {|i| edits += [vec_prefix(v, i)]; } - ix(2u, 1u, Lv) {|i| edits += [vec_suffix(v, i)]; } + ix(0u, 1u, Lv) {|i| edits += [vec_omit(v, i)]/~; } + ix(0u, 1u, Lv) {|i| edits += [vec_dup(v, i)]/~; } + ix(0u, 2u, Lv) {|i| edits += [vec_swadj(v, i)]/~; } + ix(1u, 2u, Lv) {|i| edits += [vec_prefix(v, i)]/~; } + ix(2u, 1u, Lv) {|i| edits += [vec_suffix(v, i)]/~; } ix(0u, 1u, len(xs)) {|j| ix(0u, 1u, Lv) {|i| @@ -83,7 +83,7 @@ fn vec_edits<T: copy>(v: [T], xs: [T]) -> [[T]] { // Would be nice if this were built in: // https://github.com/graydon/rust/issues/424 -fn vec_to_str(v: [int]) -> str { +fn vec_to_str(v: [int]/~) -> str { let i = 0u; let s = "["; while i < len(v) { @@ -94,19 +94,19 @@ fn vec_to_str(v: [int]) -> str { ret s + "]"; } -fn show_edits(a: [int], xs: [int]) { +fn show_edits(a: [int]/~, xs: [int]/~) { log(error, "=== Edits of " + vec_to_str(a) + " ==="); let b = vec_edits(a, xs); ix(0u, 1u, len(b)) {|i| log(error, vec_to_str(b[i])); } } fn demo_edits() { - let xs = [7, 8]; - show_edits([], xs); - show_edits([1], xs); - show_edits([1, 2], xs); - show_edits([1, 2, 3], xs); - show_edits([1, 2, 3, 4], xs); + let xs = [7, 8]/~; + show_edits([]/~, xs); + show_edits([1]/~, xs); + show_edits([1, 2]/~, xs); + show_edits([1, 2, 3]/~, xs); + show_edits([1, 2, 3, 4]/~, xs); } fn main() { demo_edits(); } |
