Skip to content

Commit

Permalink
Make 'values' on TestCounter, TestRecorder and TestMeter public (#129)
Browse files Browse the repository at this point in the history
Co-authored-by: Hamzah Malik <hamzah_malik@apple.com>
  • Loading branch information
hamzahrmalik and hamzahrmalik committed May 26, 2023
1 parent 8bcdb6e commit 3402510
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 51 deletions.
44 changes: 23 additions & 21 deletions Sources/MetricsTestKit/TestMetrics.swift
Expand Up @@ -324,20 +324,22 @@ public final class TestCounter: TestMetric, CounterHandler, Equatable {
}

public var lastValue: Int64? {
return self.values.last?.1
return self.last?.1
}

public var totalValue: Int64 {
return self.values.map { $0.1 }.reduce(0, +)
return self.values.reduce(0, +)
}

public var last: (Date, Int64)? {
return self.values.last
return self.lock.withLock {
self._values.last
}
}

var values: [(Date, Int64)] {
public var values: [Int64] {
return self.lock.withLock {
self._values
self._values.map { $0.1 }
}
}

Expand Down Expand Up @@ -396,12 +398,14 @@ public final class TestMeter: TestMetric, MeterHandler, Equatable {
}

public var last: (Date, Double)? {
return self.values.last
return self.lock.withLock {
self._values.last
}
}

var values: [(Date, Double)] {
public var values: [Double] {
return self.lock.withLock {
self._values
self._values.map { $0.1 }
}
}

Expand Down Expand Up @@ -446,12 +450,14 @@ public final class TestRecorder: TestMetric, RecorderHandler, Equatable {
}

public var last: (Date, Double)? {
return self.values.last
return self.lock.withLock {
self._values.last
}
}

var values: [(Date, Double)] {
public var values: [Double] {
return self.lock.withLock {
self._values
self._values.map { $0.1 }
}
}

Expand Down Expand Up @@ -486,14 +492,12 @@ public final class TestTimer: TestMetric, TimerHandler, Equatable {
}
}

func retrieveValueInPreferredUnit(atIndex i: Int) -> Double {
return self.lock.withLock {
let value = _values[i].1
guard let displayUnit = self.displayUnit else {
return Double(value)
}
return Double(value) / Double(displayUnit.scaleFromNanoseconds)
public func valueInPreferredUnit(atIndex i: Int) -> Double {
let value = self.values[i]
guard let displayUnit = self.displayUnit else {
return Double(value)
}
return Double(value) / Double(displayUnit.scaleFromNanoseconds)
}

public func recordNanoseconds(_ duration: Int64) {
Expand All @@ -503,9 +507,7 @@ public final class TestTimer: TestMetric, TimerHandler, Equatable {
}

public var lastValue: Int64? {
return self.lock.withLock {
return self._values.last?.1
}
return self.last?.1
}

public var values: [Int64] {
Expand Down
36 changes: 18 additions & 18 deletions Tests/MetricsTests/CoreMetricsTests.swift
Expand Up @@ -13,7 +13,7 @@
//===----------------------------------------------------------------------===//

@testable import CoreMetrics
@testable import MetricsTestKit
import MetricsTestKit
import XCTest

class MetricsTests: XCTestCase {
Expand Down Expand Up @@ -49,7 +49,7 @@ class MetricsTests: XCTestCase {
Counter(label: name).increment(by: value)
let counter = try metrics.expectCounter(name)
XCTAssertEqual(counter.values.count, 1, "expected number of entries to match")
XCTAssertEqual(counter.values[0].1, Int64(value), "expected value to match")
XCTAssertEqual(counter.values[0], Int64(value), "expected value to match")
counter.reset()
XCTAssertEqual(counter.values.count, 0, "expected number of entries to match")
}
Expand Down Expand Up @@ -112,7 +112,7 @@ class MetricsTests: XCTestCase {
fpCounter.increment(by: Double(sign: .plus, exponent: 63, significand: 1))
// Much larger than Int64
fpCounter.increment(by: Double.greatestFiniteMagnitude)
let values = counter.values.map { $0.1 }
let values = counter.values
XCTAssertEqual(values.count, 2, "expected number of entries to match")
XCTAssertEqual(values, [Int64.max, Int64.max], "expected extremely large values to be replaced with Int64.max")
}
Expand All @@ -132,15 +132,15 @@ class MetricsTests: XCTestCase {

// Increment by a small value that should grow the accumulated buffer past 1.0 (perfectly representable)
fpCounter.increment(by: 1.5)
var values = counter.values.map { $0.1 }
var values = counter.values
XCTAssertEqual(values.count, 1, "expected number of entries to match")
XCTAssertEqual(values, [2], "expected entries to match")
XCTAssertEqual(rawFpCounter.fraction, 0.25, "")

// Increment by a large value that should leave a fraction in the accumulator
// 1110506744053.76
fpCounter.increment(by: Double(sign: .plus, exponent: 40, significand: 1.01))
values = counter.values.map { $0.1 }
values = counter.values
XCTAssertEqual(values.count, 2, "expected number of entries to match")
XCTAssertEqual(values, [2, 1_110_506_744_054], "expected entries to match")
XCTAssertEqual(rawFpCounter.fraction, 0.010009765625, "expected fractional accumulated value")
Expand Down Expand Up @@ -178,7 +178,7 @@ class MetricsTests: XCTestCase {
}
XCTAssertEqual(values.count, testRecorder.values.count, "expected number of entries to match")
for i in 0 ... values.count - 1 {
XCTAssertEqual(Int32(testRecorder.values[i].1), values[i], "expected value #\(i) to match.")
XCTAssertEqual(Int32(testRecorder.values[i]), values[i], "expected value #\(i) to match.")
}
}

Expand All @@ -194,7 +194,7 @@ class MetricsTests: XCTestCase {
}
XCTAssertEqual(values.count, testRecorder.values.count, "expected number of entries to match")
for i in 0 ... values.count - 1 {
XCTAssertEqual(Float(testRecorder.values[i].1), values[i], "expected value #\(i) to match.")
XCTAssertEqual(Float(testRecorder.values[i]), values[i], "expected value #\(i) to match.")
}
}

Expand Down Expand Up @@ -373,7 +373,7 @@ class MetricsTests: XCTestCase {
meter.set(value)
let testMeter = meter._handler as! TestMeter
XCTAssertEqual(testMeter.values.count, 1, "expected number of entries to match")
XCTAssertEqual(testMeter.values[0].1, value, "expected value to match")
XCTAssertEqual(testMeter.values[0], value, "expected value to match")
}

func testMeterBlock() throws {
Expand All @@ -386,7 +386,7 @@ class MetricsTests: XCTestCase {
Meter(label: name).set(value)
let testMeter = try metrics.expectMeter(name)
XCTAssertEqual(testMeter.values.count, 1, "expected number of entries to match")
XCTAssertEqual(testMeter.values[0].1, value, "expected value to match")
XCTAssertEqual(testMeter.values[0], value, "expected value to match")
}

func testMUX_Counter() throws {
Expand Down Expand Up @@ -424,7 +424,7 @@ class MetricsTests: XCTestCase {
let meter = factory.meters.first
XCTAssertEqual(meter?.label, name, "expected label to match")
XCTAssertEqual(meter?.values.count, 1, "expected number of entries to match")
XCTAssertEqual(meter?.values[0].1, value, "expected value to match")
XCTAssertEqual(meter?.values[0], value, "expected value to match")
}
}

Expand All @@ -441,7 +441,7 @@ class MetricsTests: XCTestCase {
let recorder = factory.recorders.first
XCTAssertEqual(recorder?.label, name, "expected label to match")
XCTAssertEqual(recorder?.values.count, 1, "expected number of entries to match")
XCTAssertEqual(recorder?.values[0].1, value, "expected value to match")
XCTAssertEqual(recorder?.values[0], value, "expected value to match")
}
}

Expand All @@ -460,7 +460,7 @@ class MetricsTests: XCTestCase {
XCTAssertEqual(timer?.values.count, 1, "expected number of entries to match")
XCTAssertEqual(timer?.values[0], Int64(seconds * 1_000_000_000), "expected value to match")
XCTAssertEqual(timer?.displayUnit, .minutes, "expected value to match")
XCTAssertEqual(timer?.retrieveValueInPreferredUnit(atIndex: 0), Double(seconds) / 60.0, "seconds should be returned as minutes")
XCTAssertEqual(timer?.valueInPreferredUnit(atIndex: 0), Double(seconds) / 60.0, "seconds should be returned as minutes")
}
}

Expand Down Expand Up @@ -488,7 +488,7 @@ class MetricsTests: XCTestCase {

let recorder = gauge._handler as! TestRecorder
XCTAssertEqual(recorder.values.count, 1, "expected number of entries to match")
XCTAssertEqual(recorder.values.first!.1, value, "expected value to match")
XCTAssertEqual(recorder.values.first, value, "expected value to match")
XCTAssertEqual(metrics.recorders.count, 1, "recorder should have been stored")

let identity = ObjectIdentifier(recorder)
Expand All @@ -500,7 +500,7 @@ class MetricsTests: XCTestCase {

let recorderAgain = gaugeAgain._handler as! TestRecorder
XCTAssertEqual(recorderAgain.values.count, 1, "expected number of entries to match")
XCTAssertEqual(recorderAgain.values.first!.1, -value, "expected value to match")
XCTAssertEqual(recorderAgain.values.first, -value, "expected value to match")

let identityAgain = ObjectIdentifier(recorderAgain)
XCTAssertNotEqual(identity, identityAgain, "since the cached metric was released, the created a new should have a different identity")
Expand All @@ -518,7 +518,7 @@ class MetricsTests: XCTestCase {

let testMeter = meter._handler as! TestMeter
XCTAssertEqual(testMeter.values.count, 1, "expected number of entries to match")
XCTAssertEqual(testMeter.values.first!.1, value, "expected value to match")
XCTAssertEqual(testMeter.values.first, value, "expected value to match")
XCTAssertEqual(metrics.meters.count, 1, "recorder should have been stored")

let identity = ObjectIdentifier(testMeter)
Expand All @@ -530,7 +530,7 @@ class MetricsTests: XCTestCase {

let testMeterAgain = meterAgain._handler as! TestMeter
XCTAssertEqual(testMeterAgain.values.count, 1, "expected number of entries to match")
XCTAssertEqual(testMeterAgain.values.first!.1, -value, "expected value to match")
XCTAssertEqual(testMeterAgain.values.first, -value, "expected value to match")

let identityAgain = ObjectIdentifier(testMeterAgain)
XCTAssertNotEqual(identity, identityAgain, "since the cached metric was released, the created a new should have a different identity")
Expand All @@ -548,7 +548,7 @@ class MetricsTests: XCTestCase {

let testCounter = counter._handler as! TestCounter
XCTAssertEqual(testCounter.values.count, 1, "expected number of entries to match")
XCTAssertEqual(testCounter.values.first!.1, Int64(value), "expected value to match")
XCTAssertEqual(testCounter.values.first, Int64(value), "expected value to match")
XCTAssertEqual(metrics.counters.count, 1, "counter should have been stored")

let identity = ObjectIdentifier(counter)
Expand All @@ -560,7 +560,7 @@ class MetricsTests: XCTestCase {

let testCounterAgain = counterAgain._handler as! TestCounter
XCTAssertEqual(testCounterAgain.values.count, 1, "expected number of entries to match")
XCTAssertEqual(testCounterAgain.values.first!.1, Int64(value), "expected value to match")
XCTAssertEqual(testCounterAgain.values.first, Int64(value), "expected value to match")

let identityAgain = ObjectIdentifier(counterAgain)
XCTAssertNotEqual(identity, identityAgain, "since the cached metric was released, the created a new should have a different identity")
Expand Down
16 changes: 8 additions & 8 deletions Tests/MetricsTests/MetricsTests.swift
Expand Up @@ -14,7 +14,7 @@

@testable import CoreMetrics
@testable import Metrics
@testable import MetricsTestKit
import MetricsTestKit
import XCTest

class MetricsExtensionsTests: XCTestCase {
Expand Down Expand Up @@ -132,25 +132,25 @@ class MetricsExtensionsTests: XCTestCase {
let testTimer = timer._handler as! TestTimer

testTimer.preferDisplayUnit(.nanoseconds)
XCTAssertEqual(testTimer.retrieveValueInPreferredUnit(atIndex: 0), value * 1000 * 1000 * 1000, accuracy: 1.0, "expected value to match")
XCTAssertEqual(testTimer.valueInPreferredUnit(atIndex: 0), value * 1000 * 1000 * 1000, accuracy: 1.0, "expected value to match")

testTimer.preferDisplayUnit(.microseconds)
XCTAssertEqual(testTimer.retrieveValueInPreferredUnit(atIndex: 0), value * 1000 * 1000, accuracy: 0.001, "expected value to match")
XCTAssertEqual(testTimer.valueInPreferredUnit(atIndex: 0), value * 1000 * 1000, accuracy: 0.001, "expected value to match")

testTimer.preferDisplayUnit(.milliseconds)
XCTAssertEqual(testTimer.retrieveValueInPreferredUnit(atIndex: 0), value * 1000, accuracy: 0.000001, "expected value to match")
XCTAssertEqual(testTimer.valueInPreferredUnit(atIndex: 0), value * 1000, accuracy: 0.000001, "expected value to match")

testTimer.preferDisplayUnit(.seconds)
XCTAssertEqual(testTimer.retrieveValueInPreferredUnit(atIndex: 0), value, accuracy: 0.000000001, "expected value to match")
XCTAssertEqual(testTimer.valueInPreferredUnit(atIndex: 0), value, accuracy: 0.000000001, "expected value to match")

testTimer.preferDisplayUnit(.minutes)
XCTAssertEqual(testTimer.retrieveValueInPreferredUnit(atIndex: 0), value / 60, accuracy: 0.000000001, "expected value to match")
XCTAssertEqual(testTimer.valueInPreferredUnit(atIndex: 0), value / 60, accuracy: 0.000000001, "expected value to match")

testTimer.preferDisplayUnit(.hours)
XCTAssertEqual(testTimer.retrieveValueInPreferredUnit(atIndex: 0), value / (60 * 60), accuracy: 0.000000001, "expected value to match")
XCTAssertEqual(testTimer.valueInPreferredUnit(atIndex: 0), value / (60 * 60), accuracy: 0.000000001, "expected value to match")

testTimer.preferDisplayUnit(.days)
XCTAssertEqual(testTimer.retrieveValueInPreferredUnit(atIndex: 0), value / (60 * 60 * 24), accuracy: 0.000000001, "expected value to match")
XCTAssertEqual(testTimer.valueInPreferredUnit(atIndex: 0), value / (60 * 60 * 24), accuracy: 0.000000001, "expected value to match")
}
}

Expand Down
8 changes: 4 additions & 4 deletions Tests/MetricsTests/TestSendable.swift
Expand Up @@ -14,7 +14,7 @@

@testable import CoreMetrics
import Dispatch
@testable import MetricsTestKit
import MetricsTestKit
import XCTest

class SendableTest: XCTestCase {
Expand All @@ -32,7 +32,7 @@ class SendableTest: XCTestCase {
let task = Task.detached { () -> [Int64] in
counter.increment(by: value)
let handler = counter._handler as! TestCounter
return handler.values.map { $0.1 }
return handler.values
}
let values = await task.value
XCTAssertEqual(values.count, 1, "expected number of entries to match")
Expand Down Expand Up @@ -61,7 +61,7 @@ class SendableTest: XCTestCase {
let task = Task.detached { () -> [Double] in
recorder.record(value)
let handler = recorder._handler as! TestRecorder
return handler.values.map { $0.1 }
return handler.values
}
let values = await task.value
XCTAssertEqual(values.count, 1, "expected number of entries to match")
Expand All @@ -76,7 +76,7 @@ class SendableTest: XCTestCase {
let task = Task.detached { () -> [Double] in
meter.set(value)
let handler = meter._handler as! TestMeter
return handler.values.map { $0.1 }
return handler.values
}
let values = await task.value
XCTAssertEqual(values.count, 1, "expected number of entries to match")
Expand Down

0 comments on commit 3402510

Please sign in to comment.