diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index bd78c6635..1f2c83a93 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -10,6 +10,7 @@ 4B049CDD1DA3C82F00322067 /* BCDTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B049CDC1DA3C82F00322067 /* BCDTest.swift */; }; 4B0BE4281D3481E700D5256B /* DigitalPhaseLockedLoop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0BE4261D3481E700D5256B /* DigitalPhaseLockedLoop.cpp */; }; 4B0CCC451C62D0B3001CAC5F /* CRT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0CCC421C62D0B3001CAC5F /* CRT.cpp */; }; + 4B121F951E05E66800BFDA12 /* PCMPatchedTrackTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B121F941E05E66800BFDA12 /* PCMPatchedTrackTests.mm */; }; 4B14145B1B58879D00E04248 /* CPU6502.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1414571B58879D00E04248 /* CPU6502.cpp */; }; 4B14145D1B5887A600E04248 /* CPU6502.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1414571B58879D00E04248 /* CPU6502.cpp */; }; 4B14145E1B5887AA00E04248 /* CPU6502AllRAM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1414591B58879D00E04248 /* CPU6502AllRAM.cpp */; }; @@ -425,6 +426,8 @@ 4B0BE4271D3481E700D5256B /* DigitalPhaseLockedLoop.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = DigitalPhaseLockedLoop.hpp; sourceTree = ""; }; 4B0CCC421C62D0B3001CAC5F /* CRT.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CRT.cpp; sourceTree = ""; }; 4B0CCC431C62D0B3001CAC5F /* CRT.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CRT.hpp; sourceTree = ""; }; + 4B121F931E05E66800BFDA12 /* PCMPatchedTrackTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PCMPatchedTrackTests.h; sourceTree = ""; }; + 4B121F941E05E66800BFDA12 /* PCMPatchedTrackTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = PCMPatchedTrackTests.mm; sourceTree = ""; }; 4B1414501B58848C00E04248 /* ClockSignal-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ClockSignal-Bridging-Header.h"; sourceTree = ""; }; 4B1414571B58879D00E04248 /* CPU6502.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CPU6502.cpp; sourceTree = ""; }; 4B1414581B58879D00E04248 /* CPU6502.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CPU6502.hpp; sourceTree = ""; }; @@ -1679,6 +1682,8 @@ isa = PBXGroup; children = ( 4B5073081DDFCFDF00C48FBD /* ArrayBuilderTests.h */, + 4B121F931E05E66800BFDA12 /* PCMPatchedTrackTests.h */, + 4B121F941E05E66800BFDA12 /* PCMPatchedTrackTests.mm */, 4B5073091DDFCFDF00C48FBD /* ArrayBuilderTests.mm */, 4BB73EB81B587A5100552FC2 /* Info.plist */, 4BC9E1ED1D23449A003FCEE4 /* 6502InterruptTests.swift */, @@ -2453,6 +2458,7 @@ 4B1414621B58888700E04248 /* KlausDormannTests.swift in Sources */, 4B1414601B58885000E04248 /* WolfgangLorenzTests.swift in Sources */, 4B049CDD1DA3C82F00322067 /* BCDTest.swift in Sources */, + 4B121F951E05E66800BFDA12 /* PCMPatchedTrackTests.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/OSBindings/Mac/Clock SignalTests/ArrayBuilderTests.mm b/OSBindings/Mac/Clock SignalTests/ArrayBuilderTests.mm index 9436cb775..9b10f2588 100644 --- a/OSBindings/Mac/Clock SignalTests/ArrayBuilderTests.mm +++ b/OSBindings/Mac/Clock SignalTests/ArrayBuilderTests.mm @@ -43,6 +43,11 @@ static void setData(bool is_input, uint8_t *data, size_t size) } } +- (std::function)emptyFlushFunction +{ + return [=] (uint8_t *input, size_t input_size, uint8_t *output, size_t output_size) {}; +} + - (void)testSingleWriteSingleFlush { Outputs::CRT::ArrayBuilder arrayBuilder(200, 100, setData); @@ -53,7 +58,7 @@ static void setData(bool is_input, uint8_t *data, size_t size) for(int c = 0; c < 5; c++) input[c] = c; for(int c = 0; c < 3; c++) output[c] = c + 0x80; - arrayBuilder.flush(); + arrayBuilder.flush(self.emptyFlushFunction); arrayBuilder.submit(); [self assertMonotonicForInputSize:5 outputSize:3]; @@ -77,7 +82,7 @@ static void setData(bool is_input, uint8_t *data, size_t size) for(int c = 0; c < 2; c++) input[c] = c+2; for(int c = 0; c < 2; c++) output[c] = c+2 + 0x80; - arrayBuilder.flush(); + arrayBuilder.flush(self.emptyFlushFunction); arrayBuilder.submit(); [self assertMonotonicForInputSize:4 outputSize:4]; @@ -98,7 +103,7 @@ static void setData(bool is_input, uint8_t *data, size_t size) XCTAssert(inputData.length == 0, @"No input data should have been received; %lu bytes were received", (unsigned long)inputData.length); XCTAssert(outputData.length == 0, @"No output data should have been received; %lu bytes were received", (unsigned long)outputData.length); - arrayBuilder.flush(); + arrayBuilder.flush(self.emptyFlushFunction); arrayBuilder.submit(); XCTAssert(inputData.length == 25, @"All input data should have been received; %lu bytes were received", (unsigned long)inputData.length); @@ -112,7 +117,7 @@ static void setData(bool is_input, uint8_t *data, size_t size) arrayBuilder.get_input_storage(5); arrayBuilder.get_output_storage(5); - arrayBuilder.flush(); + arrayBuilder.flush(self.emptyFlushFunction); uint8_t *input = arrayBuilder.get_input_storage(5); uint8_t *output = arrayBuilder.get_output_storage(5); @@ -122,7 +127,7 @@ static void setData(bool is_input, uint8_t *data, size_t size) for(int c = 0; c < 5; c++) input[c] = c; for(int c = 0; c < 5; c++) output[c] = c + 0x80; - arrayBuilder.flush(); + arrayBuilder.flush(self.emptyFlushFunction); arrayBuilder.submit(); [self assertMonotonicForInputSize:5 outputSize:5]; diff --git a/OSBindings/Mac/Clock SignalTests/PCMPatchedTrackTests.h b/OSBindings/Mac/Clock SignalTests/PCMPatchedTrackTests.h new file mode 100644 index 000000000..67c243416 --- /dev/null +++ b/OSBindings/Mac/Clock SignalTests/PCMPatchedTrackTests.h @@ -0,0 +1,13 @@ +// +// PCMPatchedTrackTests.h +// Clock Signal +// +// Created by Thomas Harte on 17/12/2016. +// Copyright © 2016 Thomas Harte. All rights reserved. +// + +#import + +@interface PCMPatchedTrackTests : XCTestCase + +@end diff --git a/OSBindings/Mac/Clock SignalTests/PCMPatchedTrackTests.mm b/OSBindings/Mac/Clock SignalTests/PCMPatchedTrackTests.mm new file mode 100644 index 000000000..0d2393b01 --- /dev/null +++ b/OSBindings/Mac/Clock SignalTests/PCMPatchedTrackTests.mm @@ -0,0 +1,39 @@ +// +// PCMPatchedTrackTests.m +// Clock Signal +// +// Created by Thomas Harte on 17/12/2016. +// Copyright © 2016 Thomas Harte. All rights reserved. +// + +#import "PCMPatchedTrackTests.h" + +#include "PCMTrack.hpp" +#include "PCMPatchedTrack.hpp" + +@implementation PCMPatchedTrackTests + +- (Storage::Disk::PCMTrack)togglingTrack +{ + Storage::Disk::PCMSegment segment; + segment.data = { 0xff, 0xff, 0xff, 0xff }; + segment.number_of_bits = 32; + return Storage::Disk::PCMTrack(segment); +} + +- (void)testUnpatchedTrack +{ + Storage::Disk::PCMTrack track = self.togglingTrack; + + // Confirm that there are now flux transitions (just the first five will do) + // located 1/32nd of a rotation apart. + int c = 5; + while(c--) + { + Storage::Disk::Track::Event event = track.get_next_event(); + Storage::Time simplified_time = event.length.simplify(); + XCTAssert(simplified_time.length == 1 && simplified_time.clock_rate == 32, "flux transitions should be 1/32nd of a track apart"); + } +} + +@end