Skip to content

Commit 8fbfb56

Browse files
jrudermanbrson
authored andcommitted
---
yaml --- r: 3786 b: refs/heads/master c: b4781bf h: refs/heads/master v: v3
1 parent 3ac8254 commit 8fbfb56

File tree

2 files changed

+14
-14
lines changed

2 files changed

+14
-14
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 3671cddcba6384973e276d14a1699e641c8eb0bc
2+
refs/heads/master: b4781bf8dd26b8823a981597aa9c73b1083177b2

trunk/src/fuzzer/ivec_fuzz.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Idea: provide functions for 'exhaustive' and 'random' modification of vecs.
77
two functions, "return the number of possible edits" and "return edit #n"
88
99
It would be nice if this could be data-driven, so the two functions could share information:
10-
type vec_modifier = rec(fn (&int[] v, uint i) -> int[] fun, uint lo, uint di);
10+
type vec_modifier = rec(fn (&T[] v, uint i) -> T[] fun, uint lo, uint di);
1111
const vec_modifier[] vec_modifiers = ~[rec(fun=vec_omit, 0u, 1u), ...];
1212
But that gives me "error: internal compiler error unimplemented consts that's not a plain literal".
1313
https://github.com/graydon/rust/issues/570
@@ -26,23 +26,23 @@ import std::ivec::slice;
2626
import std::ivec::len;
2727
import std::int;
2828

29-
//fn vec_reverse(&int[] v) -> int[] { ... }
29+
//fn vec_reverse(&T[] v) -> T[] { ... }
3030

31-
fn vec_omit (&int[] v, uint i) -> int[] { slice(v, 0u, i) + slice(v, i+1u, len(v)) }
32-
fn vec_dup (&int[] v, uint i) -> int[] { slice(v, 0u, i) + ~[v.(i)] + slice(v, i, len(v)) }
33-
fn vec_swadj (&int[] v, uint i) -> int[] { slice(v, 0u, i) + ~[v.(i+1u), v.(i)] + slice(v, i+2u, len(v)) }
34-
fn vec_prefix (&int[] v, uint i) -> int[] { slice(v, 0u, i) }
35-
fn vec_suffix (&int[] v, uint i) -> int[] { slice(v, i, len(v)) }
31+
fn vec_omit [T] (&T[] v, uint i) -> T[] { slice(v, 0u, i) + slice(v, i+1u, len(v)) }
32+
fn vec_dup [T] (&T[] v, uint i) -> T[] { slice(v, 0u, i) + ~[v.(i)] + slice(v, i, len(v)) }
33+
fn vec_swadj [T] (&T[] v, uint i) -> T[] { slice(v, 0u, i) + ~[v.(i+1u), v.(i)] + slice(v, i+2u, len(v)) }
34+
fn vec_prefix [T] (&T[] v, uint i) -> T[] { slice(v, 0u, i) }
35+
fn vec_suffix [T] (&T[] v, uint i) -> T[] { slice(v, i, len(v)) }
3636

37-
fn vec_poke (&int[] v, uint i, int x) -> int[] { slice(v, 0u, i) + ~[x] + slice(v, i+1u, len(v)) }
38-
fn vec_insert (&int[] v, uint i, int x) -> int[] { slice(v, 0u, i) + ~[x] + slice(v, i, len(v)) }
37+
fn vec_poke [T] (&T[] v, uint i, &T x) -> T[] { slice(v, 0u, i) + ~[x] + slice(v, i+1u, len(v)) }
38+
fn vec_insert [T] (&T[] v, uint i, &T x) -> T[] { slice(v, 0u, i) + ~[x] + slice(v, i, len(v)) }
3939

4040
// Iterates over 0...length, skipping the specified number on each side.
4141
iter ix(uint skip_low, uint skip_high, uint length) -> uint { let uint i = skip_low; while (i + skip_high <= length) { put i; i += 1u; } }
4242

4343
// Returns a bunch of modified versions of v, some of which introduce new elements (borrowed from xs).
44-
fn vec_edits(&int[] v, &int[] xs) -> int[][] {
45-
let int[][] edits = ~[];
44+
fn vec_edits[T](&T[] v, &T[] xs) -> T[][] {
45+
let T[][] edits = ~[];
4646
let uint Lv = len(v);
4747

4848
if (Lv != 1u) { edits += ~[~[]]; } // When Lv == 1u, this is redundant with omit
@@ -55,8 +55,8 @@ fn vec_edits(&int[] v, &int[] xs) -> int[][] {
5555
for each (uint i in ix(2u, 1u, Lv)) { edits += ~[vec_suffix(v, i)]; }
5656

5757
for each (uint j in ix(0u, 1u, len(xs))) {
58-
for each (uint i in ix(0u, 1u, Lv)) { edits += ~[vec_poke (v, i, xs.(j))]; }
59-
for each (uint i in ix(0u, 0u, Lv)) { edits += ~[vec_insert(v, i, xs.(j))]; }
58+
for each (uint i in ix(0u, 1u, Lv)) { edits += ~[vec_poke (v, i, xs.(j))]; }
59+
for each (uint i in ix(0u, 0u, Lv)) { edits += ~[vec_insert(v, i, xs.(j))]; }
6060
}
6161

6262
edits

0 commit comments

Comments
 (0)