diff --git a/tests/input/evdev/Android.mk b/tests/input/evdev/Android.mk
index a79de34..1d8bf43 100644
--- a/tests/input/evdev/Android.mk
+++ b/tests/input/evdev/Android.mk
@@ -5,6 +5,7 @@
 LOCAL_C_INCLUDES += $(TOP)/external/gmock/include
 
 LOCAL_SRC_FILES:= \
+    BitUtils_test.cpp \
     InputDevice_test.cpp \
     InputHub_test.cpp \
     InputMocks.cpp \
diff --git a/tests/input/evdev/BitUtils_test.cpp b/tests/input/evdev/BitUtils_test.cpp
new file mode 100644
index 0000000..76fc8af
--- /dev/null
+++ b/tests/input/evdev/BitUtils_test.cpp
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "BitUtils.h"
+
+#include <gtest/gtest.h>
+
+namespace android {
+namespace tests {
+
+TEST(BitInRange, testInvalidRange) {
+    uint8_t arr[2] = { 0xff, 0xff };
+    EXPECT_FALSE(testBitInRange(arr, 0, 0));
+    EXPECT_FALSE(testBitInRange(arr, 1, 0));
+}
+
+TEST(BitInRange, testNoBits) {
+    uint8_t arr[1];
+    arr[0] = 0;
+    EXPECT_FALSE(testBitInRange(arr, 0, 8));
+}
+
+TEST(BitInRange, testOneBit) {
+    uint8_t arr[1];
+    for (int i = 0; i < 8; ++i) {
+        arr[0] = 1 << i;
+        EXPECT_TRUE(testBitInRange(arr, 0, 8));
+    }
+}
+
+TEST(BitInRange, testZeroStart) {
+    uint8_t arr[1] = { 0x10 };
+    for (int i = 0; i < 5; ++i) {
+        EXPECT_FALSE(testBitInRange(arr, 0, i));
+    }
+    for (int i = 5; i <= 8; ++i) {
+        EXPECT_TRUE(testBitInRange(arr, 0, i));
+    }
+}
+
+TEST(BitInRange, testByteBoundaryEnd) {
+    uint8_t arr[1] = { 0x10 };
+    for (int i = 0; i < 5; ++i) {
+        EXPECT_TRUE(testBitInRange(arr, i, 8));
+    }
+    for (int i = 5; i <= 8; ++i) {
+        EXPECT_FALSE(testBitInRange(arr, i, 8));
+    }
+}
+
+TEST(BitInRange, testMultiByteArray) {
+    // bits set: 11 and 16
+    uint8_t arr[3] = { 0x00, 0x08, 0x01 };
+    for (int start = 0; start < 24; ++start) {
+        for (int end = start + 1; end <= 24; ++end) {
+            if (start > 16 || end <= 11 || (start > 11 && end <= 16)) {
+                EXPECT_FALSE(testBitInRange(arr, start, end))
+                    << "range = (" << start << ", " << end << ")";
+            } else {
+                EXPECT_TRUE(testBitInRange(arr, start, end))
+                    << "range = (" << start << ", " << end << ")";
+            }
+        }
+    }
+}
+
+}  // namespace tests
+}  // namespace android
diff --git a/tests/input/evdev/InputDevice_test.cpp b/tests/input/evdev/InputDevice_test.cpp
index bed05b8..8d6aa68 100644
--- a/tests/input/evdev/InputDevice_test.cpp
+++ b/tests/input/evdev/InputDevice_test.cpp
@@ -14,8 +14,7 @@
  * limitations under the License.
  */
 
-#define LOG_TAG "InputHub_test"
-//#define LOG_NDEBUG 0
+#include "InputDevice.h"
 
 #include <memory>
 
@@ -25,7 +24,6 @@
 
 #include <utils/Timers.h>
 
-#include "InputDevice.h"
 #include "InputHub.h"
 #include "InputMocks.h"
 #include "MockInputHost.h"
diff --git a/tests/input/evdev/InputHub_test.cpp b/tests/input/evdev/InputHub_test.cpp
index 5864a95..64671ff 100644
--- a/tests/input/evdev/InputHub_test.cpp
+++ b/tests/input/evdev/InputHub_test.cpp
@@ -14,23 +14,19 @@
  * limitations under the License.
  */
 
-#define LOG_TAG "InputHub_test"
-//#define LOG_NDEBUG 0
-
-#include <linux/input.h>
+#include "InputHub.h"
 
 #include <chrono>
 #include <memory>
 #include <mutex>
 
+#include <linux/input.h>
+
 #include <gtest/gtest.h>
 
-#include <utils/Log.h>
 #include <utils/StopWatch.h>
 #include <utils/Timers.h>
 
-#include "InputHub.h"
-#include "InputHub-internal.h"
 #include "TestHelpers.h"
 
 // # of milliseconds to fudge stopwatch measurements
@@ -257,63 +253,5 @@
     EXPECT_TRUE(deviceCallbackFinished);
 }
 
-using internal::testBitInRange;
-
-TEST(BitInRange, testInvalidRange) {
-    uint8_t arr[2] = { 0xff, 0xff };
-    EXPECT_FALSE(testBitInRange(arr, 0, 0));
-    EXPECT_FALSE(testBitInRange(arr, 1, 0));
-}
-
-TEST(BitInRange, testNoBits) {
-    uint8_t arr[1];
-    arr[0] = 0;
-    EXPECT_FALSE(testBitInRange(arr, 0, 8));
-}
-
-TEST(BitInRange, testOneBit) {
-    uint8_t arr[1];
-    for (int i = 0; i < 8; ++i) {
-        arr[0] = 1 << i;
-        EXPECT_TRUE(testBitInRange(arr, 0, 8));
-    }
-}
-
-TEST(BitInRange, testZeroStart) {
-    uint8_t arr[1] = { 0x10 };
-    for (int i = 0; i < 5; ++i) {
-        EXPECT_FALSE(testBitInRange(arr, 0, i));
-    }
-    for (int i = 5; i <= 8; ++i) {
-        EXPECT_TRUE(testBitInRange(arr, 0, i));
-    }
-}
-
-TEST(BitInRange, testByteBoundaryEnd) {
-    uint8_t arr[1] = { 0x10 };
-    for (int i = 0; i < 5; ++i) {
-        EXPECT_TRUE(testBitInRange(arr, i, 8));
-    }
-    for (int i = 5; i <= 8; ++i) {
-        EXPECT_FALSE(testBitInRange(arr, i, 8));
-    }
-}
-
-TEST(BitInRange, testMultiByteArray) {
-    // bits set: 11 and 16
-    uint8_t arr[3] = { 0x00, 0x08, 0x01 };
-    for (int start = 0; start < 24; ++start) {
-        for (int end = start + 1; end <= 24; ++end) {
-            if (start > 16 || end <= 11 || (start > 11 && end <= 16)) {
-                EXPECT_FALSE(testBitInRange(arr, start, end))
-                    << "range = (" << start << ", " << end << ")";
-            } else {
-                EXPECT_TRUE(testBitInRange(arr, start, end))
-                    << "range = (" << start << ", " << end << ")";
-            }
-        }
-    }
-}
-
 }  // namespace tests
 }  // namespace android
diff --git a/tests/input/evdev/InputMocks.cpp b/tests/input/evdev/InputMocks.cpp
index f4a341a..bd09a3d 100644
--- a/tests/input/evdev/InputMocks.cpp
+++ b/tests/input/evdev/InputMocks.cpp
@@ -1,3 +1,19 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include "InputMocks.h"
 
 namespace android {
diff --git a/tests/input/evdev/MockInputHost.h b/tests/input/evdev/MockInputHost.h
index a91f95c..aae0564 100644
--- a/tests/input/evdev/MockInputHost.h
+++ b/tests/input/evdev/MockInputHost.h
@@ -17,9 +17,10 @@
 #ifndef ANDROID_MOCK_INPUT_HOST_H_
 #define ANDROID_MOCK_INPUT_HOST_H_
 
+#include "InputHost.h"
+
 #include "gmock/gmock.h"
 
-#include "InputHost.h"
 
 namespace android {
 namespace tests {
diff --git a/tests/input/evdev/TestHelpers.cpp b/tests/input/evdev/TestHelpers.cpp
index 63b579e..9898a6f 100644
--- a/tests/input/evdev/TestHelpers.cpp
+++ b/tests/input/evdev/TestHelpers.cpp
@@ -17,6 +17,8 @@
 #define LOG_TAG "TestHelpers"
 #define LOG_NDEBUG 0
 
+#include "TestHelpers.h"
+
 #include <dirent.h>
 #include <fcntl.h>
 #include <stdlib.h>
@@ -26,8 +28,6 @@
 
 #include <utils/Log.h>
 
-#include "TestHelpers.h"
-
 namespace android {
 
 static const char kTmpDirTemplate[] = "/data/local/tmp/XXXXXX";
