Merge "Fix a few issues in MediaMuxerTest."
diff --git a/tests/tests/provider/src/android/provider/cts/MediaStore_Images_ThumbnailsTest.java b/tests/tests/provider/src/android/provider/cts/MediaStore_Images_ThumbnailsTest.java
index e8a13a9..60bf011 100644
--- a/tests/tests/provider/src/android/provider/cts/MediaStore_Images_ThumbnailsTest.java
+++ b/tests/tests/provider/src/android/provider/cts/MediaStore_Images_ThumbnailsTest.java
@@ -30,6 +30,7 @@
 import android.provider.MediaStore;
 import android.provider.MediaStore.Images.Media;
 import android.provider.MediaStore.Images.Thumbnails;
+import android.provider.MediaStore.MediaColumns;
 import android.test.InstrumentationTestCase;
 
 import java.io.File;
@@ -277,4 +278,74 @@
             // expected
         }
     }
+
+    public void testThumbnailOrderedQuery() throws Exception {
+        Bitmap src = BitmapFactory.decodeResource(mContext.getResources(), R.raw.scenery);
+        Uri url[] = new Uri[3];
+        try{
+            for (int i = 0; i < url.length; i++) {
+                url[i] = Uri.parse(Media.insertImage(mContentResolver, src, null, null));
+                long origId = Long.parseLong(url[i].getLastPathSegment());
+                Bitmap foo = MediaStore.Images.Thumbnails.getThumbnail(mContentResolver,
+                        origId, Thumbnails.MICRO_KIND, null);
+                assertNotNull(foo);
+            }
+
+            // remove one of the images, its thumbnail, and the thumbnail cache
+            Cursor c = mContentResolver.query(url[1], null, null, null, null);
+            assertEquals(1, c.getCount());
+            c.moveToFirst();
+            String path = c.getString(c.getColumnIndex(MediaColumns.DATA));
+            long id = c.getLong(c.getColumnIndex(MediaColumns._ID));
+            c.close();
+            assertTrue(new File(path).delete());
+
+            long removedId = Long.parseLong(url[1].getLastPathSegment());
+            long remainingId1 = Long.parseLong(url[0].getLastPathSegment());
+            long remainingId2 = Long.parseLong(url[2].getLastPathSegment());
+            c = mContentResolver.query(
+                    MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, null,
+                    Thumbnails.IMAGE_ID + "=?", new String[] { Long.toString(removedId) }, null);
+            assertTrue(c.getCount() > 0);  // one or more thumbnail kinds
+            while (c.moveToNext()) {
+                path = c.getString(c.getColumnIndex(MediaColumns.DATA));
+                assertTrue(new File(path).delete());
+            }
+            c.close();
+
+            File thumbdir = new File(path).getParentFile();
+            File[] list = thumbdir.listFiles();
+            for (int i = 0; i < list.length; i++) {
+                if (list[i].getName().startsWith(".thumbdata")) {
+                    assertTrue(list[i].delete());
+                }
+            }
+
+            // check if a thumbnail is still being returned for the image that was removed
+            Bitmap foo = MediaStore.Images.Thumbnails.getThumbnail(mContentResolver,
+                    removedId, Thumbnails.MICRO_KIND, null);
+            assertNull(foo);
+
+            for (String order: new String[] { " ASC", " DESC" }) {
+                c = mContentResolver.query(
+                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null,
+                        MediaColumns._ID + order);
+                while (c.moveToNext()) {
+                    id = c.getLong(c.getColumnIndex(MediaColumns._ID));
+                    foo = MediaStore.Images.Thumbnails.getThumbnail(
+                            mContentResolver, id,
+                            MediaStore.Images.Thumbnails.MICRO_KIND, null);
+                    if (id == removedId) {
+                        assertNull("unexpected bitmap with" + order + " ordering", foo);
+                    } else if (id == remainingId1 || id == remainingId2) {
+                        assertNotNull("missing bitmap with" + order + " ordering", foo);
+                    }
+                }
+                c.close();
+            }
+        } catch (UnsupportedOperationException e) {
+            // the tests will be aborted because the image will be put in sdcard
+            fail("There is no sdcard attached! " + e.getMessage());
+        }
+    }
 }
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/CoreMathVerifier.java b/tests/tests/renderscript/src/android/renderscript/cts/CoreMathVerifier.java
index 8841b14..90f47da 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/CoreMathVerifier.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/CoreMathVerifier.java
@@ -927,12 +927,12 @@
     }
 
     static public void computeLgamma(TestLgamma.ArgumentsFloatFloat args) {
-        args.out = new Floaty(lgamma(args.in));
+        args.out = new Floaty(lgamma(args.in), 16, 128);
     }
 
     static public void computeLgamma(TestLgamma.ArgumentsFloatIntFloat args) {
         LgammaResult result = lgamma2(args.inX);
-        args.out = new Floaty(result.lgamma);
+        args.out = new Floaty(result.lgamma, 16, 128);
         args.outY = result.gammaSign;
     }