Forráskód Böngészése

Merge pull request #27 from norio-nomura/fix-26

Fix #26
Norio Nomura 8 éve
szülő
commit
d5e25e8cdd
3 módosított fájl, 41 hozzáadás és 11 törlés
  1. 18 7
      .travis.yml
  2. 13 4
      Sources/Base32/Base32.swift
  3. 10 0
      Tests/Base32Tests/Base32Tests.swift

+ 18 - 7
.travis.yml

@@ -3,22 +3,33 @@ matrix:
   include:
   include:
   - script:
   - script:
     - set -o pipefail
     - set -o pipefail
-    - xcodebuild -scheme Base32 test | xcpretty
-    - xcodebuild -scheme Base32 test -destination "name=iPhone 7" | xcpretty
-    - xcodebuild -scheme Base32 test -destination "name=Apple TV 1080p" | xcpretty
+    - xcodebuild -scheme Base32 build-for-testing test-without-building | xcpretty
+    - xcodebuild -scheme Base32 build-for-testing test-without-building -destination "name=iPhone 7" | xcpretty
+    - xcodebuild -scheme Base32 build-for-testing test-without-building -destination "name=Apple TV 1080p" | xcpretty
     - xcodebuild -scheme Base32 build -destination "name=Apple Watch - 38mm" | xcpretty
     - xcodebuild -scheme Base32 build -destination "name=Apple Watch - 38mm" | xcpretty
     - swift test
     - swift test
     - pod lib lint
     - pod lib lint
-    env: JOB=macOS
+    env: JOB=macOS-Swift3.0.2
     os: osx
     os: osx
     osx_image: xcode8.2
     osx_image: xcode8.2
+  - script:
+    - set -o pipefail
+    - xcodebuild -scheme Base32 build-for-testing test-without-building | xcpretty
+    - xcodebuild -scheme Base32 build-for-testing test-without-building -destination "name=iPhone 7" | xcpretty
+    - xcodebuild -scheme Base32 build-for-testing test-without-building -destination "name=Apple TV 1080p" | xcpretty
+    - xcodebuild -scheme Base32 build -destination "name=Apple Watch - 38mm" | xcpretty
+    - swift test
+    - pod lib lint
+    env: JOB=macOS-Swift3.1
+    os: osx
+    osx_image: xcode8.3
     before_install:
     before_install:
-      - xcrun simctl delete E40727B3-41FB-4D6E-B4CB-BFA87109EB12
-  - script: docker run -v `pwd`:`pwd` -w `pwd` norionomura/sourcekit:302 swift test
+      - xcrun simctl delete 38C891AB-EC79-43E4-9311-6FDEB12DCF11 || true
+  - script: docker run -v `pwd`:`pwd` -w `pwd` swift:3.0.2 swift test
     env: JOB=Linux-Swift3.0.2
     env: JOB=Linux-Swift3.0.2
     sudo: required
     sudo: required
     services: docker
     services: docker
-  - script: docker run -v `pwd`:`pwd` -w `pwd` norionomura/sourcekit:3120170211a swift test
+  - script: docker run -v `pwd`:`pwd` -w `pwd` swift:3.1 swift test
     env: JOB=Linux-Swift3.1
     env: JOB=Linux-Swift3.1
     sudo: required
     sudo: required
     services: docker
     services: docker

+ 13 - 4
Sources/Base32/Base32.swift

@@ -362,25 +362,34 @@ private func base32decode(_ string: String, _ table: [UInt8]) -> [UInt8]? {
         case 7:
         case 7:
             value6 = table[Int(encoded[6])]
             value6 = table[Int(encoded[6])]
             value5 = table[Int(encoded[5])]
             value5 = table[Int(encoded[5])]
-            decoded[4] = value6 << 5 | value7
             fallthrough
             fallthrough
         case 5:
         case 5:
             value4 = table[Int(encoded[4])]
             value4 = table[Int(encoded[4])]
-            decoded[3] = value4 << 7 | value5 << 2 | value6 >> 3
             fallthrough
             fallthrough
         case 4:
         case 4:
             value3 = table[Int(encoded[3])]
             value3 = table[Int(encoded[3])]
             value2 = table[Int(encoded[2])]
             value2 = table[Int(encoded[2])]
-            decoded[2] = value3 << 4 | value4 >> 1
             fallthrough
             fallthrough
         case 2:
         case 2:
             value1 = table[Int(encoded[1])]
             value1 = table[Int(encoded[1])]
             value0 = table[Int(encoded[0])]
             value0 = table[Int(encoded[0])]
+        default: break
+        }
+        switch remainEncodedLength {
+        case 7:
+            decoded[3] = value4 << 7 | value5 << 2 | value6 >> 3
+            fallthrough
+        case 5:
+            decoded[2] = value3 << 4 | value4 >> 1
+            fallthrough
+        case 4:
             decoded[1] = value1 << 6 | value2 << 1 | value3 >> 4
             decoded[1] = value1 << 6 | value2 << 1 | value3 >> 4
+            fallthrough
+        case 2:
             decoded[0] = value0 << 3 | value1 >> 2
             decoded[0] = value0 << 3 | value1 >> 2
         default: break
         default: break
         }
         }
-        
+
         return result
         return result
     }
     }
 }
 }

+ 10 - 0
Tests/Base32Tests/Base32Tests.swift

@@ -207,6 +207,15 @@ class Base32Tests: XCTestCase {
             XCTAssertNil(resultHex, "base32HexDecode for \(test)")
             XCTAssertNil(resultHex, "base32HexDecode for \(test)")
         }
         }
     }
     }
+
+    func testBase32Decode() {
+        self.measure{
+            let b32 = "AY22KLPRBYJXNH6TRM4I3LPBYA======"
+            for _ in 0...100 {
+                _ = b32.base32DecodedData
+            }
+        }
+    }
 }
 }
 
 
 extension Base32Tests {
 extension Base32Tests {
@@ -220,6 +229,7 @@ extension Base32Tests {
             ("test_base32ExtensionData", test_base32ExtensionData),
             ("test_base32ExtensionData", test_base32ExtensionData),
             ("test_base32ExtensionDataAndString", test_base32ExtensionDataAndString),
             ("test_base32ExtensionDataAndString", test_base32ExtensionDataAndString),
             ("test_base32DecodeStringAcceptableLengthPatterns", test_base32DecodeStringAcceptableLengthPatterns),
             ("test_base32DecodeStringAcceptableLengthPatterns", test_base32DecodeStringAcceptableLengthPatterns),
+            ("testBase32Decode", testBase32Decode)
         ]
         ]
     }
     }
 }
 }