view yetilab/vector/test/test_vector.yeti @ 254:5eb57c649de0 sparse

Using hashes is simpler, but turns out to be mostly no faster and sometimes much slower. Not one to merge back.
author Chris Cannam
date Tue, 21 May 2013 17:40:33 +0100
parents 77c6a81c577f
children de770971a628
line wrap: on
line source

module yetilab.vector.test.test_vector;

vec = load yetilab.vector.vector;

{ compare } = load yetilab.test.test;

[

"zeros-empty": \(
    v = vec.zeros 0;
    compare (vec.length v) 0;
),

"zeros": \(
    v = vec.zeros 3;
    a = vec.array v;
    compare (vec.length v) 3 and
        compare a[0] 0 and
        compare a[1] 0 and
        compare a[2] 0;
),

"consts-empty": \(
    v = vec.consts 4 0;
    compare (vec.length v) 0;
),

"consts": \(
    v = vec.consts 4 3;
    a = vec.array v;
    compare (vec.length v) 3 and
        compare a[0] 4 and
        compare a[1] 4 and
        compare a[2] 4;
),

"ones-empty": \(
    v = vec.ones 0;
    compare (vec.length v) 0;
),

"ones": \(
    v = vec.ones 3;
    a = vec.array v;
    compare (vec.length v) 3 and
        compare a[0] 1 and
        compare a[1] 1 and
        compare a[2] 1;
),

"from-list-empty": \(
    v = vec.fromList [];
    compare (vec.length v) 0;
),

"from-list": \(
    v = vec.fromList [1,2,3,4];
    a = vec.array v;
    compare (vec.length v) 4 and
        compare a[0] 1 and
        compare a[1] 2 and
        compare a[2] 3 and
        compare a[3] 4;
),

"equal-empty": \(
    vec.equal (vec.fromList []) (vec.fromList [])
),

"equal": \(
    v = vec.fromList [1,1,1,1];
    w = vec.ones 4;
    w' = vec.zeros 4;
    w'' = vec.ones 3;
    vec.equal v w and not vec.equal v w' and not vec.equal v w'';
),
/*
"copyOf-empty": \(
    vec.equal (vec.fromList []) (vec.copyOf (vec.fromList []))
),

"copyOf": \(
    v = vec.fromList [1,2,3,4];
    w = vec.copyOf v;
    vec.equal v w and (
        v[0] := 0; // check result is not aliasing inputs
        not vec.equal v w
    );
),
*/
"rangeOf": \(
    v = vec.fromList [1,2,3,4];
    vec.equal (vec.rangeOf 0 4 v) v and (
        vec.equal (vec.rangeOf 2 2 v) (vec.fromList [3,4])
    )
),

"resizedTo": \(
    vec.equal (vec.resizedTo 4 (vec.fromList [])) (vec.zeros 4) and
        vec.equal (vec.resizedTo 2 (vec.fromList [1,2])) (vec.fromList [1,2]) and
        vec.equal (vec.resizedTo 3 (vec.fromList [1,2])) (vec.fromList [1,2,0]) and
        vec.equal (vec.resizedTo 2 (vec.fromList [1,2,3])) (vec.fromList [1,2]);
),

"concat2": \(
    v = vec.fromList [1,2,3];
    w = vec.fromList [4,5,6];
    x = vec.concat [v, w];
    x' = vec.fromList [1,2,3,4,5,6];
    vec.equal x x' and
/*       (v[0] := 0; // check result is not aliasing inputs
        w[0] := 0;
        vec.equal x x') and */
        vec.equal x' (vec.concat [x', vec.fromList []]) and
        vec.equal x' (vec.concat [vec.fromList [], x'])
),

"concatn": \(
    v = vec.fromList [1,2,3];
    w = vec.fromList [4,5,6];
    vec.equal (vec.concat []) (vec.zeros 0) and
        vec.equal (vec.concat [v]) v and
        vec.equal (vec.concat [v,w,v]) (vec.fromList [1,2,3,4,5,6,1,2,3])
),

] is hash<string, () -> boolean>;