diff --git a/CHANGLOG b/CHANGLOG
index 933f74a..de49535 100644
--- a/CHANGLOG
+++ b/CHANGLOG
@@ -35,4 +35,8 @@
## 1.0.6-202004
- 修复一个bug https://github.com/EeeMt/phone-number-geo/issues/1
-- 优化单元测试
\ No newline at end of file
+- 优化单元测试
+
+## 1.0.7-202004
+- 修复1300000xxxx无法查询的问题
+- 修复单元测试缺陷
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 82131dd..8e402d6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
me.ihxq.projects
phone-number-geo
- 1.0.6-202004
+ 1.0.7-202004
jar
phone-number-geo
https://github.com/EeeMt/phone-number-geo
diff --git a/src/main/java/me/ihxq/projects/pna/algorithm/AnotherBinarySearchAlgorithmImpl.java b/src/main/java/me/ihxq/projects/pna/algorithm/AnotherBinarySearchAlgorithmImpl.java
index 9e65bc2..01f6ee6 100644
--- a/src/main/java/me/ihxq/projects/pna/algorithm/AnotherBinarySearchAlgorithmImpl.java
+++ b/src/main/java/me/ihxq/projects/pna/algorithm/AnotherBinarySearchAlgorithmImpl.java
@@ -30,6 +30,20 @@ public void loadData(byte[] data) {
indicesEndOffset = originalByteBuffer.limit();
}
+ /**
+ * 对齐
+ */
+ private int alignPosition(int pos) {
+ int remain = (pos - indicesStartOffset) % 9;
+ if (pos - indicesStartOffset < 9) {
+ return pos - remain;
+ } else if (remain != 0) {
+ return pos + 9 - remain;
+ } else {
+ return pos;
+ }
+ }
+
@SuppressWarnings("DuplicatedCode")
@Override
public Optional lookup(String phoneNo) {
@@ -56,6 +70,7 @@ public Optional lookup(String phoneNo) {
int left = indicesStartOffset;
int right = indicesEndOffset;
int mid = (left + right) / 2;
+ mid = alignPosition(mid);
while (mid >= left && mid <= right) {
if (mid == right) {
return Optional.empty();
@@ -70,6 +85,7 @@ public Optional lookup(String phoneNo) {
if (compare > 0) {
int tempMid = (mid + left) / 2;
+ tempMid = alignPosition(tempMid);
right = mid;
int remain = (tempMid - indicesStartOffset) % 9;
if (tempMid - indicesStartOffset < 9) {
@@ -83,6 +99,7 @@ public Optional lookup(String phoneNo) {
}
} else {
int tempMid = (mid + right) / 2;
+ tempMid = alignPosition(tempMid);
left = mid;
int remain = (tempMid - indicesStartOffset) % 9;
if (tempMid - indicesStartOffset < 9) {
diff --git a/src/main/java/me/ihxq/projects/pna/algorithm/BinarySearchAlgorithmImpl.java b/src/main/java/me/ihxq/projects/pna/algorithm/BinarySearchAlgorithmImpl.java
index e1b9f47..b93c377 100644
--- a/src/main/java/me/ihxq/projects/pna/algorithm/BinarySearchAlgorithmImpl.java
+++ b/src/main/java/me/ihxq/projects/pna/algorithm/BinarySearchAlgorithmImpl.java
@@ -36,14 +36,14 @@ public void loadData(byte[] data) {
/**
* 对齐
*/
- private int strictMid(int mid) {
- int remain = (mid - indicesStartOffset) % 9;
- if (mid - indicesStartOffset < 9) {
- return mid - remain;
+ private int alignPosition(int pos) {
+ int remain = (pos - indicesStartOffset) % 9;
+ if (pos - indicesStartOffset < 9) {
+ return pos - remain;
} else if (remain != 0) {
- return mid + 9 - remain;
+ return pos + 9 - remain;
} else {
- return mid;
+ return pos;
}
}
@@ -78,26 +78,24 @@ public Optional lookup(String phoneNumber) {
int left = indicesStartOffset;
int right = indicesEndOffset;
int mid = (left + right) / 2;
- mid = strictMid(mid);
+ mid = alignPosition(mid);
while (mid >= left && mid <= right) {
if (mid == right) {
return Optional.empty();
}
int compare = compare(mid, attributionIdentity, byteBuffer);
- if (mid == left) {
- return Optional.empty();
- }
-
if (compare == 0) {
return extract(phoneNumber, mid, byteBuffer);
+ } else if (mid == left) {
+ return Optional.empty();
} else if (compare > 0) {
int tempMid = (mid + left) / 2;
right = mid;
- mid = strictMid(tempMid);
+ mid = alignPosition(tempMid);
} else {
int tempMid = (mid + right) / 2;
left = mid;
- mid = strictMid(tempMid);
+ mid = alignPosition(tempMid);
}
}
return Optional.empty();
diff --git a/src/main/java/me/ihxq/projects/pna/algorithm/ProspectBinarySearchAlgorithmImpl.java b/src/main/java/me/ihxq/projects/pna/algorithm/ProspectBinarySearchAlgorithmImpl.java
index 24dc8f7..411a6e0 100644
--- a/src/main/java/me/ihxq/projects/pna/algorithm/ProspectBinarySearchAlgorithmImpl.java
+++ b/src/main/java/me/ihxq/projects/pna/algorithm/ProspectBinarySearchAlgorithmImpl.java
@@ -36,14 +36,14 @@ public void loadData(byte[] data) {
/**
* 对齐
*/
- private int strictMid(int mid) {
- int remain = (mid - indicesStartOffset) % 9;
- if (mid - indicesStartOffset < 9) {
- return mid - remain;
+ private int alignPosition(int pos) {
+ int remain = (pos - indicesStartOffset) % 9;
+ if (pos - indicesStartOffset < 9) {
+ return pos - remain;
} else if (remain != 0) {
- return mid + 9 - remain;
+ return pos + 9 - remain;
} else {
- return mid;
+ return pos;
}
}
@@ -79,26 +79,25 @@ public Optional lookup(String phoneNumber) {
int right = indicesEndOffset;
int attributionIdentityPrefix = attributionIdentity / 100_000;
int mid = indicesStartOffset + ((indicesEndOffset - indicesStartOffset) / 7 * (attributionIdentityPrefix - 13));
- mid = strictMid(mid);
+ mid = alignPosition(mid);
while (mid >= left && mid <= right) {
if (mid == right) {
return Optional.empty();
}
int compare = compare(mid, attributionIdentity, byteBuffer);
- if (mid == left) {
- return Optional.empty();
- }
if (compare == 0) {
return extract(phoneNumber, mid, byteBuffer);
+ } else if (mid == left) {
+ return Optional.empty();
} else if (compare > 0) {
int tempMid = (mid + left) / 2;
right = mid;
- mid = strictMid(tempMid);
+ mid = alignPosition(tempMid);
} else {
int tempMid = (mid + right) / 2;
left = mid;
- mid = strictMid(tempMid);
+ mid = alignPosition(tempMid);
}
}
return Optional.empty();
diff --git a/src/test/java/me/ihxq/projects/pna/PhoneNumberLookupAlgorithmTest.java b/src/test/java/me/ihxq/projects/pna/PhoneNumberLookupAlgorithmTest.java
index 0de9b06..1f4631e 100644
--- a/src/test/java/me/ihxq/projects/pna/PhoneNumberLookupAlgorithmTest.java
+++ b/src/test/java/me/ihxq/projects/pna/PhoneNumberLookupAlgorithmTest.java
@@ -84,14 +84,14 @@ public void concurrencyLookup(LookupAlgorithm algorithm) {
@MethodSource("algorithms")
public void lookupFirst(LookupAlgorithm algorithm) {
PhoneNumberLookup phoneNumberLookup = constructLookup(algorithm);
- assertNotNull(phoneNumberLookup.lookup("13000000000"));
+ assertTrue(phoneNumberLookup.lookup("13000000000").isPresent());
}
@ParameterizedTest
@MethodSource("algorithms")
public void lookupLast(LookupAlgorithm algorithm) {
PhoneNumberLookup phoneNumberLookup = constructLookup(algorithm);
- assertNotNull(phoneNumberLookup.lookup("19999790000"));
+ assertTrue(phoneNumberLookup.lookup("19999790000").isPresent());
}
@ParameterizedTest