about summary refs log tree commit diff
path: root/src/fuzzer/ivec_fuzz.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/fuzzer/ivec_fuzz.rs')
-rw-r--r--src/fuzzer/ivec_fuzz.rs54
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(); }