Mercurial > hg > may
changeset 226:c00d8f7e2708
Add equalUnder to compare vectors or matrices using a particular number comparator
author | Chris Cannam |
---|---|
date | Sun, 12 May 2013 14:50:03 +0100 |
parents | 8e04d298741b |
children | 055a0a5500d7 |
files | yetilab/matrix/matrix.yeti yetilab/vector/vector.yeti |
diffstat | 2 files changed, 19 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/yetilab/matrix/matrix.yeti Sun May 12 13:31:49 2013 +0100 +++ b/yetilab/matrix/matrix.yeti Sun May 12 14:50:03 2013 +0100 @@ -122,19 +122,24 @@ toColumnMajor m = if not isRowMajor? m then m else flipped m fi; -// Matrices with different storage order but the same contents are -// equal (but comparing them is slow) -equal m1 m2 = - if size m1 != size m2 then false - elif isRowMajor? m1 != isRowMajor? m2 then equal (flipped m1) m2; +// Compare matrices using the given comparator for individual cells. +// Note that matrices with different storage order but the same +// contents are equal, although comparing them is slow. +equalUnder comparator m1 m2 = + if size m1 != size m2 then + false + elif isRowMajor? m1 != isRowMajor? m2 then + equalUnder comparator (flipped m1) m2; else - compare d1 d2 = all id (map2 vec.equal d1 d2); + compare d1 d2 = all id (map2 (vec.equalUnder comparator) d1 d2); case m1 of RowM d1: case m2 of RowM d2: compare d1 d2; _: false; esac; ColM d1: case m2 of ColM d2: compare d1 d2; _: false; esac; esac fi; +equal = equalUnder (==); + /*!!! not needed now it's immutable? copyOf m = (copyOfData d = (array (map vec.copyOf d)); @@ -287,6 +292,7 @@ identityMatrix, zeroSizeMatrix, equal, + equalUnder, // copyOf, transposed, flipped, @@ -324,6 +330,7 @@ identityMatrix is { .rows is number, .columns is number } -> matrix, zeroSizeMatrix is () -> matrix, equal is matrix -> matrix -> boolean, + equalUnder is (number -> number -> boolean) -> matrix -> matrix -> boolean, // copyOf is matrix -> matrix, transposed is matrix -> matrix, flipped is matrix -> matrix,
--- a/yetilab/vector/vector.yeti Sun May 12 13:31:49 2013 +0100 +++ b/yetilab/vector/vector.yeti Sun May 12 14:50:03 2013 +0100 @@ -62,6 +62,10 @@ equal v1 v2 = list' v1 == list' v2; +equalUnder comparator v1 v2 = + length' v1 == length' v2 and + all id (map2 comparator (list' v1) (list' v2)); + copyOf v is ~double[] -> ~double[] = Arrays#copyOf(v, list' v |> length); @@ -97,6 +101,7 @@ empty? = empty?', at = at', equal, + equalUnder, rangeOf, resizedTo, concat, @@ -115,6 +120,7 @@ empty? is vector -> boolean, at is number -> vector -> number, equal is vector -> vector -> boolean, + equalUnder is (number -> number -> boolean) -> vector -> vector -> boolean, rangeOf is number -> number -> vector -> vector, //!!! not well-named now vector arg is at the end resizedTo is number -> vector -> vector, concat is list?<vector> -> vector,