diff options
Diffstat (limited to 'BenchmarkFramework/app/src/main/java/art_benchmarks/stanford/Puzzle.java')
-rw-r--r-- | BenchmarkFramework/app/src/main/java/art_benchmarks/stanford/Puzzle.java | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/BenchmarkFramework/app/src/main/java/art_benchmarks/stanford/Puzzle.java b/BenchmarkFramework/app/src/main/java/art_benchmarks/stanford/Puzzle.java new file mode 100644 index 0000000..d449905 --- /dev/null +++ b/BenchmarkFramework/app/src/main/java/art_benchmarks/stanford/Puzzle.java @@ -0,0 +1,143 @@ +/* Copied from https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_14/SingleSource/Benchmarks + * License: LLVM Release License. See Notice file + */ + +package art_benchmarks.stanford; + +public class Puzzle { + + private static final int size = 511; + private static final int classmax = 3; + private static final int typemax = 12; + private static final int d = 8; + + public int error = 0; + + /* puzzle */ + private int[] piececount = new int [classmax + 1]; + private int[] cls = new int [typemax + 1]; + private int[] piecemax = new int [typemax + 1]; + private boolean[] puzzl = new boolean [size + 1]; + private boolean[][] p = new boolean [typemax + 1][size + 1]; + private int n; + private int kount; + +// CHECKSTYLE.OFF: .* +boolean Fit (int i, int j) { + int k; + for ( k = 0; k <= piecemax[i]; k++ ) + if ( p[i][k] ) if ( puzzl[j+k] ) return (false); + return (true); +} + +int Place (int i, int j) { + int k; + for ( k = 0; k <= piecemax[i]; k++ ) if ( p[i][k] ) puzzl[j+k] = true; + piececount[cls[i]] = piececount[cls[i]] - 1; + for ( k = j; k <= size; k++ ) if ( ! puzzl[k] ) return (k); + return (0); +} + +void Remove (int i, int j) { + int k; + for ( k = 0; k <= piecemax[i]; k++ ) if ( p[i][k] ) puzzl[j+k] = false; + piececount[cls[i]] = piececount[cls[i]] + 1; +} + +boolean Trial (int j) { + int i, k; + kount = kount + 1; + for ( i = 0; i <= typemax; i++ ) + if ( piececount[cls[i]] != 0 ) + if ( Fit (i, j) ) { + k = Place (i, j); + if ( Trial(k) || (k == 0) )return (true); + else Remove (i, j); + } + return (false); +} + +void Puzzle () { + int i, j, k, m; + for ( m = 0; m <= size; m++ ) puzzl[m] = true; + for( i = 1; i <= 5; i++ )for( j = 1; j <= 5; j++ )for( k = 1; k <= 5; k++ ) puzzl[i+d*(j+d*k)] = false; + for( i = 0; i <= typemax; i++ )for( m = 0; m<= size; m++ ) p[i][m] = false; + for( i = 0; i <= 3; i++ )for( j = 0; j <= 1; j++ )for( k = 0; k <= 0; k++ ) p[0][i+d*(j+d*k)] = true; + cls[0] = 0; + piecemax[0] = 3+d*1+d*d*0; + for( i = 0; i <= 1; i++ )for( j = 0; j <= 0; j++ )for( k = 0; k <= 3; k++ ) p[1][i+d*(j+d*k)] = true; + cls[1] = 0; + piecemax[1] = 1+d*0+d*d*3; + for( i = 0; i <= 0; i++ )for( j = 0; j <= 3; j++ )for( k = 0; k <= 1; k++ ) p[2][i+d*(j+d*k)] = true; + cls[2] = 0; + piecemax[2] = 0+d*3+d*d*1; + for( i = 0; i <= 1; i++ )for( j = 0; j <= 3; j++ )for( k = 0; k <= 0; k++ ) p[3][i+d*(j+d*k)] = true; + cls[3] = 0; + piecemax[3] = 1+d*3+d*d*0; + for( i = 0; i <= 3; i++ )for( j = 0; j <= 0; j++ )for( k = 0; k <= 1; k++ ) p[4][i+d*(j+d*k)] = true; + cls[4] = 0; + piecemax[4] = 3+d*0+d*d*1; + for( i = 0; i <= 0; i++ )for( j = 0; j <= 1; j++ )for( k = 0; k <= 3; k++ ) p[5][i+d*(j+d*k)] = true; + cls[5] = 0; + piecemax[5] = 0+d*1+d*d*3; + for( i = 0; i <= 2; i++ )for( j = 0; j <= 0; j++ )for( k = 0; k <= 0; k++ ) p[6][i+d*(j+d*k)] = true; + cls[6] = 1; + piecemax[6] = 2+d*0+d*d*0; + for( i = 0; i <= 0; i++ )for( j = 0; j <= 2; j++ )for( k = 0; k <= 0; k++ ) p[7][i+d*(j+d*k)] = true; + cls[7] = 1; + piecemax[7] = 0+d*2+d*d*0; + for( i = 0; i <= 0; i++ )for( j = 0; j <= 0; j++ )for( k = 0; k <= 2; k++ ) p[8][i+d*(j+d*k)] = true; + cls[8] = 1; + piecemax[8] = 0+d*0+d*d*2; + for( i = 0; i <= 1; i++ )for( j = 0; j <= 1; j++ )for( k = 0; k <= 0; k++ ) p[9][i+d*(j+d*k)] = true; + cls[9] = 2; + piecemax[9] = 1+d*1+d*d*0; + for( i = 0; i <= 1; i++ )for( j = 0; j <= 0; j++ )for( k = 0; k <= 1; k++ ) p[10][i+d*(j+d*k)] = true; + cls[10] = 2; + piecemax[10] = 1+d*0+d*d*1; + for( i = 0; i <= 0; i++ )for( j = 0; j <= 1; j++ )for( k = 0; k <= 1; k++ ) p[11][i+d*(j+d*k)] = true; + cls[11] = 2; + piecemax[11] = 0+d*1+d*d*1; + for( i = 0; i <= 1; i++ )for( j = 0; j <= 1; j++ )for( k = 0; k <= 1; k++ ) p[12][i+d*(j+d*k)] = true; + cls[12] = 3; + piecemax[12] = 1+d*1+d*d*1; + piececount[0] = 13; + piececount[1] = 3; + piececount[2] = 1; + piececount[3] = 1; + m = 1+d*(1+d*1); + kount = 0; + if ( Fit(0, m) ) n = Place(0, m); + else error = 1; + if ( ! Trial(n) ) error = 2; + else if ( kount != 2005 ) error = 3; +} + // CHECKSTYLE.ON: .* + + public void timePuzzle(int iters) { + for (int i = 0; i < iters; i++) Puzzle(); + } + + public static boolean verify_Puzzle() { + Puzzle obj = new Puzzle(); + obj.timePuzzle(1); + return obj.error == 0; + } + + public static void main(String[] args) { + int rc = 0; + Puzzle obj = new Puzzle(); + + long before = System.currentTimeMillis(); + obj.timePuzzle(125); + long after = System.currentTimeMillis(); + + System.out.println("art_benchmarks/stanford/Puzzle: " + (after - before)); + + if (!verify_Puzzle()) { + rc = obj.error; + } + + System.exit(rc); + } +} |