Package mikera.vectorz.impl

Source Code of mikera.vectorz.impl.TestJoinedVector

package mikera.vectorz.impl;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.util.List;

import mikera.matrixx.AMatrix;
import mikera.matrixx.Matrixx;
import mikera.matrixx.impl.ZeroMatrix;
import mikera.vectorz.AVector;
import mikera.vectorz.Vector;
import mikera.vectorz.Vector3;
import mikera.vectorz.Vectorz;

import org.junit.Test;

public class TestJoinedVector {
 
  @Test public void testJoinedArrays() {
    Vector v=Vector.of(1);
   
    AVector j=v;
   
    for (int i=0; i<10; i++) {
      j=j.join(v);
    }
    assertEquals(11,j.length());
    assertEquals(1.0, j.get(10),0.0);
   
    assertTrue(j instanceof JoinedArrayVector);
    v.set(0,2.0);
    assertEquals(2.0, j.get(10),0.0)
  }
 
  @Test public void testJoinedArrayAdd() {
    Vector v=Vector.of(0,0);
   
    AVector j=v;
   
    for (int i=0; i<10; i++) {
      j=j.join(Vector.of(0,0));
    }
    assertEquals(22,j.length());
    assertTrue(j.isZero());
   
    Vector d=Vector.createLength(j.length());
    Vectorz.fillIndexes(d);
   
    j.add(d);
    assertEquals(d,j);
  }
 
  @Test public void testJoinedArrayVectors() {
    AVector v=Vector.of(0);
    AVector w=Vector.of(0);
   
    for (int i=1; i<100; i++) {
      v=v.join(Vector.of(i));
      w=w.join(Vector.of(i));
    }
   
    v.add(w);
    v.multiply(0.5);
    assertEquals(w,v);

    w.addMultiple(v,3);
    w.multiply(0.25);
    assertEquals(v,w);
   
    w.addProduct(v,w,2);
    assertEquals(210,w.get(10),0.000);

  }
 
  @Test public void testJoinedArrayVectorAddMultiple() {
    double[] d=new double[10];
    AVector v=Vector.of(1).join(Vector.of(2,3));
    AVector t=Vector.wrap(d);
    t.addMultiple(0, v, 1);
    assertEquals(Vector.of(1,2,3,0,0,0,0,0,0,0),t);
    t.addMultiple(5, v, 2);
    assertEquals(Vector.of(1,2,3,0,0,2,4,6,0,0),t);
  }
 
  @Test public void testJoinedArrayVectorAddMultiple2() {
    AVector v=Vector.of(1).join(Vector.of(2,3));
    AVector t=Vector.of(0,0,0,0).join(Vector.of(0,0)).join(Vector.of(0,0,0,0));
    t.addMultiple(0, v, 1);
    assertEquals(Vector.of(1,2,3,0,0,0,0,0,0,0),t);
    t.addMultiple(5, v, 2);
    assertEquals(Vector.of(1,2,3,0,0,2,4,6,0,0),t);
  }
 
  @Test public void testJoinedRows() {
    assertEquals(Vector.class, Vectorz.join(Matrixx.createRandomMatrix(5, 5).getSlices()).getClass());
    assertEquals(JoinedMultiVector.class, Vectorz.join(Matrixx.createIdentityMatrix(4).getSlices()).getClass());
    assertEquals(ZeroVector.class, Vectorz.join(ZeroMatrix.create(3, 4).getSlices()).getClass());
  }
 
  @Test public void testMatrixRowJoining() {
    AMatrix m=Matrixx.createRandomMatrix(5, 5);
    AMatrix sm=m.subMatrix(1,3,0,5);
    List<AVector> slices=sm.getSlices();
    AVector jr=Vectorz.join(slices);
    assertEquals(ArraySubVector.class, jr.getClass());
  }
 
  @Test public void testJoinedOptimisations() {
    assertEquals(RangeVector.class, RangeVector.create(1, 3).join(RangeVector.create(4, 7)).getClass());
    assertEquals(RangeVector.class, RangeVector.create(1, 3).join(RangeVector.create(2, 0)).getClass());
    assertEquals(RepeatedElementVector.class, RepeatedElementVector.create(1, 2.3).join(RepeatedElementVector.create(2, 2.3)).getClass());
    assertEquals(JoinedArrayVector.class, Vector.of(1,2).join(Vector.of(3,4)).getClass());
    assertEquals(Vector0.class, Vector0.INSTANCE.join(Vector0.INSTANCE).getClass());
    assertEquals(Vector.class, Vector.of(1,2,3).join(Vector0.INSTANCE).getClass());
  }

 
  @Test public void testJoinedViews() {
    Vector v=Vector.createLength(1000);
    Vectorz.fillIndexes(v);
    Vector is=v.clone();
   
    AVector jv=Vector0.INSTANCE;
    for (int i=0; i<1000; i+=10) {
      jv=jv.join(v.subVector(i, 10));
    }
   
    assertEquals(jv,v);
   
    jv.add(v);
    assertEquals(100,v.get(50),0.000001);
   
    jv.addMultiple(is,-1.0);
    assertEquals(v,is);
   
    jv.addProduct(is,is,2.0);
    assertEquals(3,v.get(1),0.000001);
    assertEquals(20100,v.get(100),0.000001);
  }
 
  @Test public void testJoinedArraySubs() {
    Vector v=Vector.of(0,1,2,3,4,5,6,7,8,9);
   
    AVector j=v;
   
    for (int i=0; i<10; i++) {
      AVector sv=v.subVector(i, 1);
      assertEquals(1,sv.length());
      j=j.join(v.subVector(i, 1));
    }
    assertEquals(20,j.length());
    assertEquals(JoinedArrayVector.class,j.getClass());
   
    assertEquals(v,j.subVector(10, 10));
    v.set(0,2.0);
    assertEquals(2.0, j.get(10),0.0)
  }
 
  @Test public void testJoinedVectorAdd() {
    Vector v=Vector.of(0,1,2,3,4,5,6,7,8,9);
    AVector j=v.clone().join(v.exactClone());
   
    j.add(5,v);
   
    assertEquals(4.0,j.get(4),0.0);
    assertEquals(13.0,j.get(9),0.0);
    assertEquals(5.0,j.get(10),0.0);
    assertEquals(5.0,j.get(15),0.0);
  }
 
  @Test public void testJoinedCoalesce() {
    Vector a=Vector.of(0,1);
    Vector b=Vector.of(2,3);
    Vector c=Vector.of(4,5);
   
    JoinedArrayVector ja=(JoinedArrayVector)a.join(b.subVector(0, 1));
    JoinedArrayVector jb=(JoinedArrayVector)b.subVector(1, 1).join(c);
   
    assertEquals(ja,Vector.of(0,1,2));
    assertEquals(jb,Vector.of(3,4,5));
    assertEquals(2,ja.numArrays());
    assertEquals(2,jb.numArrays());
   
    JoinedArrayVector jabc=ja.join(jb);
    jabc.validate();
    assertEquals(Vector.of(0,1,2,3,4,5),jabc);
    assertEquals(3,jabc.numArrays());
  }
 
  @Test public void testJoinedVector3Add() {
    Vector v=Vector.of(0,1,2,3,4);
    AVector j=v.clone().join(v.exactClone());
    assertEquals(JoinedArrayVector.class,j.getClass());
   
    j.add(4,Vector3.of(10,20,30));
   
    assertEquals(3.0,j.get(3),0.0);
    assertEquals(14.0,j.get(4),0.0);
    assertEquals(20.0,j.get(5),0.0);
    assertEquals(31.0,j.get(6),0.0);
    assertEquals(2.0,j.get(7),0.0);
   
    j.addMultiple(4,Vector3.of(10,20,30), 10.0);
    assertEquals(2.0,j.get(2),0.0);
    assertEquals(3.0,j.get(3),0.0);
    assertEquals(114.0,j.get(4),0.0);
    assertEquals(220.0,j.get(5),0.0);
    assertEquals(331.0,j.get(6),0.0);
    assertEquals(2.0,j.get(7),0.0);
   
    assertTrue(j.isFullyMutable());
  }
 
  @Test public void testVectorRejoin() {
    Vector v=Vector.createLength(10);
    Vectorz.fillGaussian(v);
   
    AVector rv=v.subVector(0, 3).join(v.subVector(3,5)).join(v.subVector(8,2));
    assertEquals(Vector.class,rv.getClass());
  }
 
  @Test public void testMultiJoining() {
    AVector v=Vector0.INSTANCE;
   
    // initial join should replace Vector0
    v=v.join(AxisVector.create(1, 3));
    assertEquals(AxisVector.class,v.getClass());
   
    // second join should create JoinedVector
    v=v.join(Vector.of(1,2,3));
    assertEquals(JoinedVector.class,v.getClass());
   
    // third join should promote to JoinedMultiVector
    v=v.join(ZeroVector.create(3));
    assertEquals(JoinedMultiVector.class,v.getClass());
  }
}
TOP

Related Classes of mikera.vectorz.impl.TestJoinedVector

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.