A fast, safe, and efficient CBOR serialization library for Swift on any platform. swiftpackageindex.com/thecoolwinter/CBOR/1.1.1/documentation/cbor
atproto swift cbor
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 152 lines 4.6 kB view raw
1// 2// RoundTripTests.swift 3// CBOR 4// 5// Created by Khan Winter on 8/28/25. 6// 7 8import Testing 9#if canImport(FoundationEssentials) 10import FoundationEssentials 11#else 12import Foundation 13#endif 14@testable import CBOR 15 16@Suite 17struct RoundTripTests { 18 @Test 19 func int() throws { 20 for _ in 0..<10 { 21 let value = Int.random(in: 0..<Int.max) 22 let data = try CBOREncoder().encode(value) 23 let result = try CBORDecoder().decode(Int.self, from: data) 24 #expect(value == result) 25 } 26 } 27 28 @Test 29 func bool() throws { 30 var value = true 31 var data = try CBOREncoder().encode(value) 32 var result = try CBORDecoder().decode(Bool.self, from: data) 33 #expect(value == result) 34 35 value = false 36 data = try CBOREncoder().encode(value) 37 result = try CBORDecoder().decode(Bool.self, from: data) 38 #expect(value == result) 39 } 40 41 @Test 42 func float() throws { 43 for _ in 0..<10 { 44 let value = Float.random(in: -1000..<1000) 45 let data = try CBOREncoder().encode(value) 46 let result = try CBORDecoder().decode(Float.self, from: data) 47 #expect(value == result) 48 } 49 } 50 51 @Test 52 func double() throws { 53 for _ in 0..<10 { 54 let value = Double.random(in: -1000..<1000) 55 let data = try CBOREncoder().encode(value) 56 let result = try CBORDecoder().decode(Double.self, from: data) 57 #expect(value == result) 58 } 59 } 60 61 @Test 62 func data() throws { 63 let value = Data([0xde, 0xad, 0xbe, 0xef]) 64 let encoded = try CBOREncoder().encode(value) 65 let decoded = try CBORDecoder().decode(Data.self, from: encoded) 66 #expect(value == decoded) 67 } 68 69 @Test 70 func emptyData() throws { 71 let value = Data() 72 let encoded = try CBOREncoder().encode(value) 73 let decoded = try CBORDecoder().decode(Data.self, from: encoded) 74 #expect(value == decoded) 75 } 76 77 @Test 78 func string() throws { 79 let value = "Hello, CBOR 👋" 80 let encoded = try CBOREncoder().encode(value) 81 let decoded = try CBORDecoder().decode(String.self, from: encoded) 82 #expect(value == decoded) 83 } 84 85 @Test 86 func emptyString() throws { 87 let value = "" 88 let encoded = try CBOREncoder().encode(value) 89 let decoded = try CBORDecoder().decode(String.self, from: encoded) 90 #expect(value == decoded) 91 } 92 93 @Test 94 func person() throws { 95 let value = Person.mock 96 let encoded = try CBOREncoder().encode(value) 97 let decoded = try CBORDecoder().decode(Person.self, from: encoded) 98 #expect(value.name == decoded.name) 99 #expect(value.age == decoded.age) 100 #expect(value.email == decoded.email) 101 #expect(value.isActive == decoded.isActive) 102 #expect(value.tags == decoded.tags) 103 } 104 105 @Test 106 func company() throws { 107 let value = Company.mock 108 let encoded = try CBOREncoder().encode(value) 109 let decoded = try CBORDecoder().decode(Company.self, from: encoded) 110 #expect(value.name == decoded.name) 111 #expect(value.founded == decoded.founded) 112 #expect(value.employees.count == decoded.employees.count) 113 #expect(value.metadata == decoded.metadata) 114 115 // sanity check one employee too 116 if let first = decoded.employees.first { 117 #expect(first.name == Person.mock.name) 118 } 119 } 120 121 @Test 122 func dateEpoch() throws { 123 let value = Date() 124 let encoded = try CBOREncoder().encode(value) 125 let decoded = try CBORDecoder().decode(Date.self, from: encoded) 126 #expect(decoded.timeIntervalSince1970.rounded(.down) == value.timeIntervalSince1970.rounded(.down)) 127 } 128 129 @Test 130 func dateString() throws { 131 let value = Date() 132 let encoded = try CBOREncoder(dateEncodingStrategy: .string).encode(value) 133 let decoded = try CBORDecoder().decode(Date.self, from: encoded) 134 #expect(decoded.timeIntervalSince1970.rounded(.down) == value.timeIntervalSince1970.rounded(.down)) 135 } 136 137 @Test 138 func uuid() throws { 139 let value = UUID() 140 let encoded = try CBOREncoder().encode(value) 141 let decoded = try CBORDecoder().decode(UUID.self, from: encoded) 142 #expect(decoded == value) 143 } 144 145 @Test 146 func map() throws { 147 let value = ["a": 0] 148 let encoded = try CBOREncoder().encode(value) 149 let decoded = try CBORDecoder().decode([String: Int].self, from: encoded) 150 #expect(decoded == value) 151 } 152}