Build out MATLAB test framework and core integration coverage
This commit is contained in:
@@ -1,11 +1,87 @@
|
||||
classdef Fiber_test < matlab.unittest.TestCase
|
||||
% Test class for Fiber
|
||||
classdef Fiber_test < IMDDTestCase
|
||||
methods (Test, TestTags = {'unit', 'fast', 'optical', 'fiber'})
|
||||
function zeroLengthPropagationLeavesSignalUnchanged(testCase)
|
||||
fiber = Fiber("fsimu", 64e9, "fiber_length", 0, "alpha", 0, "D", 0, ...
|
||||
"Dslope", 0, "lambda0", 1310, "gamma", 0);
|
||||
inputSig = makeOpticalsignal([1 + 1i; -2 + 0.5i; 0.25 - 0.75i], 64e9, 1310e-9);
|
||||
|
||||
methods (Test)
|
||||
function testExample(testCase)
|
||||
% Example test case for Fiber
|
||||
% Add your test code here
|
||||
testCase.verifyTrue(true);
|
||||
outputSig = fiber.process_(inputSig);
|
||||
|
||||
testCase.verifyClass(outputSig, 'Opticalsignal');
|
||||
testCase.verifyEqual(outputSig.signal, inputSig.signal, "AbsTol", 1e-12);
|
||||
testCase.verifyEqual(outputSig.lambda, inputSig.lambda);
|
||||
testCase.verifyEqual(outputSig.fs, inputSig.fs);
|
||||
end
|
||||
|
||||
function attenuationOnlyMatchesAnalyticalFieldScaling(testCase)
|
||||
fs = 32e9;
|
||||
lambda = 1310e-9;
|
||||
fiberLengthKm = 2.5;
|
||||
alphaDbPerKm = 0.2;
|
||||
inputSignal = [1 + 2i; -0.5 + 0.25i; 0.75 - 1.25i; 2 - 1i];
|
||||
fiber = Fiber("fsimu", fs, "fiber_length", fiberLengthKm, "alpha", alphaDbPerKm, ...
|
||||
"D", 0, "Dslope", 0, "lambda0", 1310, "gamma", 0);
|
||||
inputSig = makeOpticalsignal(inputSignal, fs, lambda);
|
||||
|
||||
outputSig = fiber.process_(inputSig);
|
||||
|
||||
alphaLin = alphaDbPerKm / 10 * log(10) / 1e3;
|
||||
expected = inputSignal .* exp(-alphaLin / 2 * fiber.fiber_length);
|
||||
|
||||
testCase.verifyEqual(outputSig.signal, expected, "AbsTol", 1e-12);
|
||||
end
|
||||
|
||||
function linearOnlyPropagationPreservesShapeAndEnergyWhenLossless(testCase)
|
||||
fs = 64e9;
|
||||
lambda = 1310e-9;
|
||||
inputSignal = [1 + 0.5i; -1i; 0.75; 2 - 0.25i];
|
||||
fiber = Fiber("fsimu", fs, "fiber_length", 0.3, "alpha", 0, ...
|
||||
"D", 0, "Dslope", 0, "lambda0", 1310, "gamma", 0);
|
||||
inputSig = makeOpticalsignal(inputSignal, fs, lambda);
|
||||
|
||||
outputSig = fiber.process_(inputSig);
|
||||
|
||||
testCase.verifySize(outputSig.signal, size(inputSignal));
|
||||
testCase.verifyEqual(outputSig.signal, inputSignal, "AbsTol", 1e-12);
|
||||
testCase.verifyEqual(norm(outputSig.signal), norm(inputSignal), "AbsTol", 1e-12);
|
||||
end
|
||||
|
||||
function processAddsLogbookEntryAndReturnsOpticalsignal(testCase)
|
||||
fs = 32e9;
|
||||
lambda = 1310e-9;
|
||||
fiber = Fiber("fsimu", fs, "fiber_length", 0, "alpha", 0, "D", 0, ...
|
||||
"Dslope", 0, "lambda0", 1310, "gamma", 0);
|
||||
inputSig = makeOpticalsignal([1; -1; 2], fs, lambda);
|
||||
|
||||
outputSig = fiber.process(inputSig);
|
||||
|
||||
testCase.verifyClass(outputSig, 'Opticalsignal');
|
||||
testCase.verifyEqual(outputSig.signal, inputSig.signal, "AbsTol", 1e-12);
|
||||
testCase.verifyEqual(height(outputSig.logbook), height(inputSig.logbook) + 1);
|
||||
testCase.verifyEqual(string(outputSig.logbook.Description(end)), "Fiber ");
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function sig = makeOpticalsignal(values, fs, lambda)
|
||||
sig = Opticalsignal(values, ...
|
||||
"fs", fs, ...
|
||||
"logbook", emptyLogbook(), ...
|
||||
"lambda", lambda, ...
|
||||
"nase", 0, ...
|
||||
"polrot", 0);
|
||||
end
|
||||
|
||||
function lb = emptyLogbook()
|
||||
SignalType = [];
|
||||
TimeStamp = [];
|
||||
Length = [];
|
||||
SignalPower = [];
|
||||
Nase = [];
|
||||
SignalCopy = [];
|
||||
ModifierName = [];
|
||||
ModifierCopy = {};
|
||||
Description = [];
|
||||
|
||||
lb = table(SignalType, TimeStamp, Length, SignalPower, Nase, SignalCopy, ModifierName, ModifierCopy, Description);
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user