Skip to content

Commit 1d21f66

Browse files
committed
Merge branch 'respvalue-equatable' into 'master'
Add `Equatable` conformance to `RESPValue` See merge request Mordil/swift-redi-stack!76
2 parents ca16cee + 081c7ca commit 1d21f66

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed

Sources/RediStack/RESP/RESPValue.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,3 +129,19 @@ extension RESPValue {
129129
/// - Note: This is a shorthand for `Array<UInt8>.init(fromRESP:)`.
130130
public var bytes: [UInt8]? { return [UInt8](fromRESP: self) }
131131
}
132+
133+
// MARK: Equatable
134+
135+
extension RESPValue: Equatable {
136+
public static func == (lhs: RESPValue, rhs: RESPValue) -> Bool {
137+
switch (lhs, rhs) {
138+
case (.bulkString(let lhs), .bulkString(let rhs)): return lhs == rhs
139+
case (.simpleString(let lhs), .simpleString(let rhs)): return lhs == rhs
140+
case (.integer(let lhs), .integer(let rhs)): return lhs == rhs
141+
case (.error(let lhs), .error(let rhs)): return lhs.message == rhs.message
142+
case (.array(let lhs), .array(let rhs)): return lhs == rhs
143+
case (.null, .null): return true
144+
default: return false
145+
}
146+
}
147+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// This source file is part of the RediStack open source project
4+
//
5+
// Copyright (c) 2019 RediStack project authors
6+
// Licensed under Apache License v2.0
7+
//
8+
// See LICENSE.txt for license information
9+
// See CONTRIBUTORS.txt for the list of RediStack project authors
10+
//
11+
// SPDX-License-Identifier: Apache-2.0
12+
//
13+
//===----------------------------------------------------------------------===//
14+
15+
import RediStack
16+
import XCTest
17+
18+
final class RESPValueTests: XCTestCase {
19+
func test_equatable() {
20+
let redisError = RedisError(reason: "testing")
21+
22+
let null = RESPValue.null
23+
let error = RESPValue.error(redisError)
24+
let array = RESPValue.array([.null, error])
25+
let integer = RESPValue.integer(3)
26+
let simpleString = RESPValue.simpleString("OK".byteBuffer)
27+
let bulkString = RESPValue.bulkString(nil)
28+
29+
XCTAssertEqual(null, .null)
30+
XCTAssertNotEqual(null, error)
31+
XCTAssertNotEqual(null, array)
32+
XCTAssertNotEqual(null, integer)
33+
XCTAssertNotEqual(null, simpleString)
34+
XCTAssertNotEqual(null, bulkString)
35+
36+
XCTAssertEqual(error, .error(redisError))
37+
XCTAssertNotEqual(error, .error(RedisError(reason: "failure")))
38+
XCTAssertNotEqual(error, integer)
39+
XCTAssertNotEqual(error, simpleString)
40+
XCTAssertNotEqual(error, bulkString)
41+
XCTAssertNotEqual(error, array)
42+
43+
XCTAssertEqual(array, .array([.null, error]))
44+
XCTAssertNotEqual(array, .array([integer]))
45+
XCTAssertNotEqual(array, integer)
46+
XCTAssertNotEqual(array, simpleString)
47+
XCTAssertNotEqual(array, bulkString)
48+
49+
XCTAssertEqual(integer, .integer(3))
50+
XCTAssertNotEqual(integer, .integer(Int.max))
51+
XCTAssertNotEqual(integer, simpleString)
52+
XCTAssertNotEqual(integer, bulkString)
53+
54+
XCTAssertEqual(simpleString, .simpleString("OK".byteBuffer))
55+
XCTAssertNotEqual(simpleString, .simpleString(#function.byteBuffer))
56+
XCTAssertNotEqual(simpleString, bulkString)
57+
58+
XCTAssertEqual(bulkString, .bulkString(nil))
59+
XCTAssertNotEqual(bulkString, .bulkString("OK".byteBuffer))
60+
}
61+
}

0 commit comments

Comments
 (0)