/*
Sparse Matrices test.
*/


for q in [2, 3, 4, 32003, NextPrime(10^10)] do
    "Sparse vector mult, q:", q;
    K := GF(q);
    n := 1000;
    D := 2/n;
    c := 100;
    S := SparseMatrix(RandomSparseMatrix(K, n, n, D));
    ST := Transpose(S);
    for i := 1 to c do
	v := Random(VectorSpace(K, n));
	w := v*S;
	w2 := MultiplyByTranspose(v, ST);
	assert w eq w2;
    end for;
end for;

X := IdentitySparseMatrix(Integers(), 2);
M := Submatrix(X, [2], [2]);
assert Eltseq(Matrix(M)) eq [1];

for i := 1 to 100 do
    d := 10*i;
    X := RandomSparseMatrix(GF(23), d, d, 10/d);
i, d, Density(X);
    I := [Random(1, d): i in [1 .. Random(1, d div 5)]];
    J := [Random(1, d): i in [1 .. Random(1, d div 5)]];
//I, J;
    Y := Submatrix(X, I, J);
    XS := SparseMatrix(X);
    YS := Submatrix(XS, I, J);
    assert Matrix(YS) eq Y;
end for;

