package test;
import apes.models.InternalFormat;
import apes.models.MemoryHandler;
import apes.plugins.WaveFileFormat;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
public class TestMemoryHandler
{
private MemoryHandler mH1;
private MemoryHandler mH2;
@Before public void setup()
{
mH1 = new MemoryHandler();
mH2 = new MemoryHandler();
}
@Test public void testTransfer()
{
try
{
int mhLength = 10000000;
int start = 2500005;
int stop = 7500005;
int amount = stop - start + 1;
mH1.malloc(0, mhLength);
assertEquals(mhLength, mH1.getUsedMemory());
byte[] indexes = new byte[mhLength];
for(int i = 0; i < indexes.length; i++)
{
indexes[i] = (byte)(i % 256);
}
mH1.write(0, indexes);
assertEquals(mhLength, mH1.getUsedMemory());
assertArrayEquals(indexes, mH1.read(0, mhLength));
mH2.transfer(mH1, start, stop, 0);
assertEquals(amount, mH2.getUsedMemory());
assertEquals(mhLength, mH1.getUsedMemory());
assertArrayEquals(mH1.read(start, amount), mH2.read(0, (int)mH2.getUsedMemory()));
// NĂ¥got ganska annat...
int size = 103000;
int pos = 107000;
byte[] zeros = new byte[size];
mH1.dispose();
assertEquals(0, mH1.getUsedMemory());
mH1.malloc(0, size);
assertEquals(size, mH1.getUsedMemory());
mH1.write(0, zeros);
assertEquals(size, mH1.getUsedMemory());
assertArrayEquals(zeros, mH1.read(0, size));
mH2.transfer(mH1, 0, size - 1, pos);
assertEquals(amount + size, mH2.getUsedMemory());
int i = 0;
byte[] temp;
temp = mH2.read(0, pos);
for(; i < pos; i++)
{
System.out.println(i);
assertEquals(indexes[i + start], temp[i]);
}
temp = mH2.read(pos, size);
for(int c = 0; i < pos + size; i++, c++)
{
assertEquals(0, temp[c]);
}
temp = mH2.read(pos + size, amount - ( pos + size ));
for(int c = 0; i < amount; i++, c++)
{
assertEquals(indexes[i + start], temp[c]);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
@Test public void testCutAndPaste()
{
try
{
InternalFormat iF = new WaveFileFormat().importFile( "/home/rejeep/dev/apes/", "audio_simon.wav" );
long start = 10000;
long stop = 100000;
int amount = iF.getSampleAmount();
byte[] source = null;
int length = (int)( amount - ( stop - start + 1 ) );
// Before cut and paste
source = iF.getChunk( 0, amount );
byte[] before = new byte[source.length];
System.arraycopy( source, 0, before, 0, source.length );
assertArrayEquals("Before cut and paste", source, before);
MemoryHandler mH = new MemoryHandler();
iF.cutSamples(start, stop, mH);
// After cut
source = iF.getChunk( 0, length );
byte[] afterCut = new byte[source.length];
System.arraycopy( source, 0, afterCut, 0, source.length );
assertArrayEquals("After cut", source, afterCut);
iF.pasteSamples(start, mH);
// After paste
source = iF.getChunk( 0, length );
byte[] after = new byte[source.length];
System.arraycopy( source, 0, after, 0, source.length );
assertArrayEquals("'Source' after paste", source, after);
assertArrayEquals("'Before' after paste", before, after);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}