blob: 951b2ebd5afb6640e907ccf67d77844b7995881d [file] [log] [blame]
package com.android.dx.merge;
import com.android.dex.Dex;
import com.android.dex.DexIndexOverflowException;
import java.io.File;
import java.util.Arrays;
import java.util.Random;
/**
* This test tries to merge given dex files at random, a first pass at 2 by 2, followed by
* a second pass doing multi-way merges.
*/
public class MergeTest {
private static final int NUMBER_OF_TRIES = 1000;
public static void main(String[] args) throws Throwable {
Random random = new Random();
for (int pass = 0; pass < 2; pass++) {
for (int i = 0; i < NUMBER_OF_TRIES; i++) {
// On the first pass only do 2-way merges, then do from 3 to 10 way merges
// but not more to avoid dex index overflow.
int numDex = pass == 0 ? 2 : random.nextInt(8) + 3;
String[] fileNames = new String[numDex]; // only for the error message
try {
Dex[] dexesToMerge = new Dex[numDex];
for (int j = 0; j < numDex; j++) {
String fileName = args[random.nextInt(args.length)];
fileNames[j] = fileName;
dexesToMerge[j] = new Dex(new File(fileName));
}
new DexMerger(dexesToMerge, CollisionPolicy.KEEP_FIRST).merge();
} catch (DexIndexOverflowException e) {
// ignore index overflow
} catch (Throwable t) {
System.err.println(
"Problem merging those dexes: " + Arrays.toString(fileNames));
throw t;
}
}
}
}
}