예제 #1
0
파일: Proxmark3.cs 프로젝트: l-y-n-x/teddy
        private void ReadVoltage()
        {
            MeasurementResult result = new MeasurementResult();

            MeasureAntennaInternal(result, eMeasurementType.HFAntenna);
            AntennaVoltage = result.vHF;
        }
        public MeasurementResult Measure()
        {
            using (var remoteObjectServer = new EloquentServer($"{_scheme}://127.0.0.1:50000"))
                using (var remoteObjectClient = new EloquentClient($"{_scheme}://127.0.0.1:50000", $"{_scheme}://127.0.0.1:50001"))
                {
                    remoteObjectServer.Add <IBenchmarkObject>("endpoint1", new BenchmarkObject());

                    var benchmarkObj = remoteObjectClient.Connect <IBenchmarkObject>("endpoint1");

                    var parameter = new Parameter
                    {
                        Parameter1 = new InnerParameter1
                        {
                            Parameter2 = new InnerParameter2
                            {
                                Parameter3 = new InnerParameter3
                                {
                                    IntValue    = 123,
                                    BoolValue   = false,
                                    DoubleValue = 123.123,
                                    StringValue = "123"
                                }
                            }
                        }
                    };

                    return(MeasurementResult.Measure($"EloquentObjects: One-way calls with parameter with {_scheme}", () =>
                    {
                        for (var i = 0; i < _iterations; i++)
                        {
                            benchmarkObj.OneWayCallWithParameter(parameter);
                        }
                    }));
                }
        }
        public static void Link(Result result, MeasurementResult measurementResult)
        {
            result.MeasurementResult = measurementResult;

            measurementResult.Result = result;
            measurementResult.ResultID = result.ResultID;
        }
예제 #4
0
 public void AddToQueue(MeasurementResult result)
 {
     if (result != null)
     {
         resultQueue.Enqueue(result);
     }
 }
예제 #5
0
        public MeasurementResult Measure()
        {
            var binding = _scheme == "net.tcp"
                ? (Binding) new NetTcpBinding()
                : new NetNamedPipeBinding();

            var benchmarkService = new BenchmarkService();
            var serviceHost      = new ServiceHost(benchmarkService, new Uri($"{_scheme}://127.0.0.1/Benchmarks"));

            serviceHost.AddServiceEndpoint(typeof(IBenchmarkService), binding, $"{_scheme}://127.0.0.1/Benchmarks");
            serviceHost.Open();

            var channelFactory = new DuplexChannelFactory <IBenchmarkService>(new InstanceContext(new BenchmarkCallback()), binding, new EndpointAddress($"{_scheme}://127.0.0.1/Benchmarks"));
            var channel        = channelFactory.CreateChannel();

            var result = MeasurementResult.Measure($"WCF: One-way calls with {_scheme}", () =>
            {
                for (var i = 0; i < _iterations; i++)
                {
                    channel.OneWayCall();
                }
            });

            ((IClientChannel)channel).Close();

            serviceHost.Close();

            return(result);
        }
        public void Setup()
        {
            var measurementResultValue = new MeasurementResultValue();
            measurementResultValue.DataValue = MeasurementValue;
            var measurementResult = new MeasurementResult();
            measurementResult.MeasurementResultValues.Add(measurementResultValue);
            var result = new Result();
            result.ResultDateTime = DateTime.Today;
            result.MeasurementResult = measurementResult;
            var samplingFeature = new SamplingFeature();
            samplingFeature.SamplingFeatureTypeCV = "Specimen";
            var featureAction = new FeatureAction();
            featureAction.SamplingFeature = samplingFeature;
            featureAction.Results.Add(result);
            var action = new Core.Action();
            action.ActionID = ActionId;
            action.FeatureActions.Add(featureAction);
            var actions = new List<Core.Action>();
            actions.Add(action);
            supportedData = actions;

            var mockVersionHelper = new Mock<IDataVersioningHelper>();
            mockVersionHelper.Setup(x => x.GetLatestVersionActionData(It.IsAny<Hatfield.EnviroData.Core.Action>())).Returns(action);
            mockVersionHelper.Setup(x => x.CloneActionData(It.IsAny<Hatfield.EnviroData.Core.Action>())).Returns(cloneAction(action));

            var mockRepository = new Mock<IRepository<CV_RelationshipType>>();
            testTool = new ChemistryValueCheckingTool(mockVersionHelper.Object, mockRepository.Object);

            mockChemistryValueCheckingRule = new Mock<ChemistryValueCheckingRule>();
        }
        public static void Link(Result result, MeasurementResult measurementResult)
        {
            result.MeasurementResult = measurementResult;

            measurementResult.Result   = result;
            measurementResult.ResultID = result.ResultID;
        }
예제 #8
0
        public void Write(MeasurementResult result)
        {
            long lastTimestamp = ReadLastTimestamp(result.Settings.OutputFile);
            long resultTime    = DateTime.Parse(result.Values[0]).ToFileTimeUtc();

            if (resultTime <= lastTimestamp)
            {
                return;
            }

            string currentContent = GetCurrentContent(result.Settings.OutputFile);

            using (FileStream fs = new FileStream(result.Settings.OutputFile, FileMode.OpenOrCreate))
            {
                using (StreamWriter sw = new StreamWriter(fs))
                {
                    string line = String.Join(";", result.Values);
                    Logger.Log(LogLevel.Info, line);
                    sw.WriteLine(line);
                    if (currentContent != String.Empty)
                    {
                        sw.WriteLine(currentContent);
                    }
                }
            }
        }
예제 #9
0
 private void WriteQueue()
 {
     while (resultQueue.Count > 0)
     {
         MeasurementResult result = resultQueue.Dequeue();
         statusModel.StatusMessage = String.Join(";", result.Values);
         resultWriter.Write(result);
     }
 }
예제 #10
0
        public MeasurementResult Measure()
        {
            using (var remoteObjectServer = new EloquentServer($"{_scheme}://127.0.0.1:50000", new EloquentSettings
            {
                HeartBeatMs = 1000,
                MaxHeartBeatLost = 5,
                ReceiveTimeout = 1000,
                SendTimeout = 1000
            }))
            {
                var benchmarkObject = new BenchmarkObject();
                remoteObjectServer.Add <IBenchmarkObject>("endpoint1", benchmarkObject);

                //Create Clients
                var clients     = new EloquentClient[_numberOfEventClients];
                var connections = new IBenchmarkObject[_numberOfEventClients];

                var autoResetEvent = new AutoResetEvent(false);
                for (var i = 0; i < _numberOfEventClients; i++)
                {
                    clients[i] = new EloquentClient($"{_scheme}://127.0.0.1:50000", $"{_scheme}://127.0.0.1:6000{i}", new EloquentSettings
                    {
                        HeartBeatMs    = 1000,
                        SendTimeout    = 1000,
                        ReceiveTimeout = 10000
                    });
                    connections[i] = clients[i].Connect <IBenchmarkObject>("endpoint1");
                    connections[i].EventOccurred += last =>
                    {
                        if (last)
                        {
                            autoResetEvent.Set();
                        }
                    };
                }

                var result = MeasurementResult.Measure($"EloquentObjects: Events with {_scheme}", () =>
                {
                    benchmarkObject.StartEvents(_iterations / _numberOfEventClients);

                    autoResetEvent.WaitOne();
                });

                //Dispose clients
                for (var i = 0; i < _numberOfEventClients; i++)
                {
                    clients[i].Dispose();
                }

                return(result);
            }
        }
        public async Task <TotalMeasurementResult> Measure(int sampleSize, int minNumberOfDataPoints, int maxNumberOfDataPoints, int stepSize, bool applyCompression, string compressionType)
        {
            double transferTime        = 0;
            double deserializationTime = 0;

            TotalMeasurementResult totalMeasurementResult = new TotalMeasurementResult();

            for (var i = minNumberOfDataPoints; i <= maxNumberOfDataPoints; i += stepSize)
            {
                MeasurementResult measurementResult = new MeasurementResult();

                for (int j = 0; j < sampleSize; j++)
                {
                    //Streaming
                    System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
                    stopwatch.Start();
                    HttpResponseMessage responseMessage = await base.MakeRequestAsync(i, applyCompression, compressionType);

                    if (responseMessage.IsSuccessStatusCode)
                    {
                        var packet = await responseMessage.Content.ReadAsStreamAsync();

                        stopwatch.Stop();
                        transferTime += stopwatch.ElapsedMilliseconds;
                        stopwatch.Reset();



                        int    length = Convert.ToInt32(packet.Length);
                        byte[] data   = new byte[length];
                        packet.Read(data, 0, length);
                        packet.Close();


                        //Deserialization

                        stopwatch.Start();
                        TimeSeriesData[] timeSeries = FlatBufferSerializer.Default.Parse <TimeSeriesData[]>(new ArrayInputBuffer(data));
                        stopwatch.Stop();
                        deserializationTime += stopwatch.ElapsedMilliseconds;
                        stopwatch.Reset();
                    }
                }

                measurementResult.DataPoints = i;
                measurementResult.TransferAndSerializationTime = transferTime / sampleSize;
                measurementResult.DeserializationTime          = deserializationTime / sampleSize;
                totalMeasurementResult.ResultList.Add(measurementResult);
            }

            return(totalMeasurementResult);
        }
예제 #12
0
        private MeasurementResult CloneMeasurementResult(MeasurementResult previousVersionMeasurementResult, Result newVersionResult)
        {
            if (previousVersionMeasurementResult == null)
            {
                return(null);
            }
            else
            {
                var newVersionMeasurementResult = new MeasurementResult();
                newVersionMeasurementResult.Result = newVersionResult;
                newVersionMeasurementResult.AggregationStatisticCV  = previousVersionMeasurementResult.AggregationStatisticCV;
                newVersionMeasurementResult.CV_AggregationStatistic = previousVersionMeasurementResult.CV_AggregationStatistic;
                newVersionMeasurementResult.CensorCodeCV            = previousVersionMeasurementResult.CensorCodeCV;
                newVersionMeasurementResult.CV_CensorCode           = previousVersionMeasurementResult.CV_CensorCode;
                newVersionMeasurementResult.QualityCodeCV           = previousVersionMeasurementResult.QualityCodeCV;
                newVersionMeasurementResult.CV_QualityCode          = previousVersionMeasurementResult.CV_QualityCode;

                newVersionMeasurementResult.SpatialReference               = previousVersionMeasurementResult.SpatialReference;
                newVersionMeasurementResult.SpatialReferenceID             = previousVersionMeasurementResult.SpatialReferenceID;
                newVersionMeasurementResult.TimeAggregationInterval        = previousVersionMeasurementResult.TimeAggregationInterval;
                newVersionMeasurementResult.TimeAggregationIntervalUnitsID = previousVersionMeasurementResult.TimeAggregationIntervalUnitsID;
                newVersionMeasurementResult.Unit             = previousVersionMeasurementResult.Unit;
                newVersionMeasurementResult.Unit1            = previousVersionMeasurementResult.Unit1;
                newVersionMeasurementResult.Unit2            = previousVersionMeasurementResult.Unit2;
                newVersionMeasurementResult.Unit3            = previousVersionMeasurementResult.Unit3;
                newVersionMeasurementResult.XLocation        = previousVersionMeasurementResult.XLocation;
                newVersionMeasurementResult.XLocationUnitsID = previousVersionMeasurementResult.XLocationUnitsID;
                newVersionMeasurementResult.YLocation        = previousVersionMeasurementResult.YLocation;
                newVersionMeasurementResult.YLocationUnitsID = previousVersionMeasurementResult.YLocationUnitsID;
                newVersionMeasurementResult.ZLocation        = previousVersionMeasurementResult.ZLocation;
                newVersionMeasurementResult.ZLocationUnitsID = previousVersionMeasurementResult.ZLocationUnitsID;

                if (previousVersionMeasurementResult.MeasurementResultValues != null)
                {
                    newVersionMeasurementResult.MeasurementResultValues = new List <MeasurementResultValue>();
                    foreach (var previousMeasurementResultValue in previousVersionMeasurementResult.MeasurementResultValues)
                    {
                        var newMeasurementResultValue = new MeasurementResultValue();
                        newMeasurementResultValue.MeasurementResult      = newVersionMeasurementResult;
                        newMeasurementResultValue.DataValue              = previousMeasurementResultValue.DataValue;
                        newMeasurementResultValue.ValueDateTime          = previousMeasurementResultValue.ValueDateTime;
                        newMeasurementResultValue.ValueDateTimeUTCOffset = previousMeasurementResultValue.ValueDateTimeUTCOffset;

                        newVersionMeasurementResult.MeasurementResultValues.Add(newMeasurementResultValue);
                    }
                }

                return(newVersionMeasurementResult);
            }
        }
예제 #13
0
파일: Proxmark3.cs 프로젝트: l-y-n-x/teddy
        private bool MeasureAntennaInternal(MeasurementResult result, eMeasurementType type = eMeasurementType.Both)
        {
            if (Port == null)
            {
                return(false);
            }
            Pm3UsbCommand cmd = new Pm3UsbCommand(0x400, (ulong)type);

            LogWindow.Log(LogWindow.eLogLevel.Debug, "[PM3] MeasureAntenna: Start");
            cmd.Write(Port);

            while (true)
            {
                Pm3UsbResponse response = new Pm3UsbResponse(Port);

                switch (response.Cmd)
                {
                case Pm3UsbResponse.eResponseType.DebugString:
                {
                    string debugStr = Encoding.UTF8.GetString(response.data.d, 0, response.data.dataLen);
                    LogWindow.Log(LogWindow.eLogLevel.Debug, "[PM3] MeasureAntenna: DebugMessage '" + debugStr + "'");
                    break;
                }

                case Pm3UsbResponse.eResponseType.NoData:
                case Pm3UsbResponse.eResponseType.Timeout:
                    LogWindow.Log(LogWindow.eLogLevel.Debug, "[PM3] MeasureAntenna: timeout");
                    continue;

                case Pm3UsbResponse.eResponseType.MeasuredAntennaTuning:
                    result.vLF125 = (response.data.arg[0] & 0xFFFF) * 0.002f;
                    result.vLF134 = ((response.data.arg[0] >> 16) & 0xFFFF) * 0.002f;
                    result.vHF    = (response.data.arg[1] & 0xFFFF) / 1000.0f;
                    result.peakF  = (response.data.arg[2] & 0xFFFF);
                    result.peakV  = ((response.data.arg[0] >> 16) & 0xFFFF) * 0.002f;
                    Array.Copy(response.data.d, result.amplitudes, 256);

                    return(true);

                default:
                    LogWindow.Log(LogWindow.eLogLevel.Debug, "[PM3] MeasureAntenna: Unhandled: " + response.Cmd);
                    break;
                }
            }
        }
예제 #14
0
        public MeasurementResult Measure()
        {
            using (var remoteObjectServer = new EloquentServer($"{_scheme}://127.0.0.1:50000"))
                using (var remoteObjectClient = new EloquentClient($"{_scheme}://127.0.0.1:50000", $"{_scheme}://127.0.0.1:50001"))
                {
                    remoteObjectServer.Add <IBenchmarkObject>("endpoint1", new BenchmarkObject());

                    var benchmarkObj = remoteObjectClient.Connect <IBenchmarkObject>("endpoint1");

                    return(MeasurementResult.Measure($"EloquentObjects: One-way calls with {_scheme}", () =>
                    {
                        for (var i = 0; i < _iterations; i++)
                        {
                            benchmarkObj.OneWayCall();
                        }
                    }));
                }
        }
예제 #15
0
파일: Proxmark3.cs 프로젝트: l-y-n-x/teddy
        internal MeasurementResult MeasureAntenna(eMeasurementType type = eMeasurementType.Both)
        {
            MeasurementResult result = new MeasurementResult();

            if (Port == null)
            {
                return(null);
            }

            StopThread();
            lock (ReaderLock)
            {
                MeasureAntennaInternal(result, type);
            }
            StartThread();

            return(result);
        }
예제 #16
0
 public MainWindow()
 {
     InitializeComponent();
     ImageInfo                             = new ImageInformation();
     DisplayControl                        = new DisplayParameters();
     IsLeftMouseButtonDown                 = false;
     ButtonImageManipulation.IsChecked     = false;
     DetectionResults                      = new DetectionResult();
     MeasurementResults                    = new MeasurementResult();
     DataGridMeasurementResult.ItemsSource = MeasurementResults.Result;
     DataGridDetectionResult.ItemsSource   = DetectionResults.Result;
     backgroundWorker                      = new BackgroundWorker()
     {
         WorkerSupportsCancellation = true,
         WorkerReportsProgress      = true
     };
     backgroundWorker.DoWork             += new DoWorkEventHandler(backgroundWorker_DoWork);
     backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted);
     backgroundWorker.ProgressChanged    += new ProgressChangedEventHandler(backgroundWorker_ProgressChanged);
 }
예제 #17
0
        private static string GetModalInfo(MeasurementResult benchmark)
        {
            if (benchmark == null || benchmark.Modality == Modality.Unknown) // not enough data to tell
            {
                return(null);
            }

            if (benchmark.Modality == Modality.Multimodal)
            {
                return("multimodal");
            }

            if (benchmark.Modality == Modality.Bimodal)
            {
                return("bimodal");
            }

            if (benchmark.Modality == Modality.Several)
            {
                return("several?");
            }

            return(null);
        }
        public static void Link(MeasurementResult measurementResult, Unit unit)
        {
            measurementResult.Unit = unit;

            unit.MeasurementResults.Add(measurementResult);
        }
        private Core.Action cloneAction(Core.Action action)
        {
            var measurementResultValueClone = new MeasurementResultValue();
            measurementResultValueClone.DataValue = action.FeatureActions.FirstOrDefault().Results.FirstOrDefault()
                .MeasurementResult.MeasurementResultValues.FirstOrDefault().DataValue;
            var measurementResultClone = new MeasurementResult();
            measurementResultClone.MeasurementResultValues.Add(measurementResultValueClone);
            var resultClone = new Result();
            resultClone.ResultDateTime = action.FeatureActions.FirstOrDefault().Results.FirstOrDefault().ResultDateTime;
            resultClone.MeasurementResult = measurementResultClone;
            var samplingFeatureClone = new SamplingFeature();
            samplingFeatureClone.SamplingFeatureTypeCV = action.FeatureActions.FirstOrDefault().SamplingFeature.SamplingFeatureTypeCV;
            var featureActionClone = new FeatureAction();
            featureActionClone.SamplingFeature = samplingFeatureClone;
            featureActionClone.Results.Add(resultClone);
            var actionClone = new Core.Action();
            actionClone.FeatureActions.Add(featureActionClone);

            return actionClone;
        }
        public static void Link(MeasurementResult measurementResult, MeasurementResultValue measurementResultValue)
        {
            measurementResult.MeasurementResultValues.Add(measurementResultValue);

            measurementResultValue.MeasurementResult = measurementResult;
        }
예제 #21
0
파일: Helpers.cs 프로젝트: pbvs/odata.net
 /// <summary>
 /// Gets the diff/base or base/diff ratio depending on which is better.
 /// </summary>
 /// <param name="conclusion">The conclusion of the result.</param>
 /// <param name="baseResult">The measured result of the base report.</param>
 /// <param name="diffResult">The measured result of the diff report.</param>
 /// <returns>The ratio between the worse result and the better result.</returns>
 public static double GetRatio(ComparisonConclusion conclusion, MeasurementResult baseResult, MeasurementResult diffResult)
 => conclusion == ComparisonConclusion.Better
         ? baseResult.Result / diffResult.Result
         : diffResult.Result / baseResult.Result;
예제 #22
0
        public static async Task <MeasurementResult> Proxy(Stamp stamp)
        {
            if (stamp == null)
            {
                return(null);
            }
            var measurement = new MeasurementResult {
                Stamp = stamp
            };

            try
            {
                var request = new ClientRequest(stamp.Address, stamp.Port);
                request.Questions.Add(new Question(Domain.FromString(stamp.ProviderName), RecordType.TXT));
                request.RecursionDesired = true;
                var sw       = Stopwatch.StartNew();
                var response = await request.Resolve().ConfigureAwait(false);

                sw.Stop();
                if (response != null)
                {
                    foreach (var answerRecord in response.AnswerRecords)
                    {
                        var certificates = new List <Certificate>();
                        var tr           = Encoding.ASCII.GetString(ArrayHelper.SubArray(answerRecord.Data, 0, 9));
                        if (tr.Equals("|DNSC\0\u0001\0\0") || tr.Equals("|DNSC\0\u0002\0\0"))
                        {
                            var certificate = ExtractCertificate(ArrayHelper.SubArray(answerRecord.Data, 9),
                                                                 Converters.StringToByteArray(stamp.PublicKey));
                            if (certificate != null)
                            {
                                if (certificate.Valid)
                                {
                                    certificates.Add(certificate);
                                }
                            }
                        }

                        if (certificates.Count > 0)
                        {
                            var newestCertificate = certificates.OrderByDescending(item => item.Serial).FirstOrDefault();
                            if (newestCertificate != null)
                            {
                                measurement.Certificate = newestCertificate;
                                measurement.Failed      = false;
                            }
                            else
                            {
                                measurement.Failed = true;
                            }
                        }
                        else
                        {
                            measurement.Failed = true;
                        }
                    }

                    measurement.Time = sw.ElapsedMilliseconds;
                }
            }
            catch (Exception)
            {
                measurement.Failed = true;
            }
            return(measurement);
        }
예제 #23
0
 public static MeasurementResultViewModel ToViewModel(this MeasurementResult input)
 {
     return(new MeasurementResultViewModel(input.Url, input.MinTime.TotalSeconds, input.MaxTime.TotalSeconds));
 }
        public async Task <TotalMeasurementResult> Measure(int sampleSize, int minNumberOfDataPoints, int maxNumberOfDataPoints, int stepSize, bool applyCompression, string compressionType)
        {
            double transferTime        = 0;
            double deserializationTime = 0;
            string contentEncoding     = "";
            Stream responseStream      = null;
            double fileSize            = 0;

            TotalMeasurementResult totalMeasurementResult = new TotalMeasurementResult();

            for (var i = minNumberOfDataPoints; i <= maxNumberOfDataPoints; i += stepSize)
            {
                MeasurementResult measurementResult = new MeasurementResult();

                for (int j = 0; j < sampleSize; j++)
                {
                    //Streaming
                    System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
                    stopwatch.Start();
                    HttpResponseMessage responseMessage = await base.MakeRequestAsync(i, applyCompression, compressionType);

                    contentEncoding = responseMessage.Content.Headers.ContentEncoding.ToString();

                    if (responseMessage.IsSuccessStatusCode)
                    {
                        var packet = await responseMessage.Content.ReadAsStreamAsync();

                        stopwatch.Stop();
                        transferTime += stopwatch.ElapsedMilliseconds;
                        stopwatch.Reset();
                        fileSize += packet.Length;

                        stopwatch.Start();
                        //Decompression if compressed
                        if (contentEncoding.ToLower().Contains("gzip"))
                        {
                            responseStream = new GZipStream(packet, CompressionMode.Decompress);
                        }
                        else if (contentEncoding.ToLower().Contains("deflate"))
                        {
                            responseStream = new DeflateStream(packet, CompressionMode.Decompress);
                        }
                        else if (contentEncoding.ToLower().Contains("br"))
                        {
                            var s = new BrotliStream(packet, CompressionMode.Decompress, true);
                            responseStream = new MemoryStream();
                            s.CopyTo(responseStream);
                        }
                        else
                        {
                            responseStream = packet;
                        }

                        //Deserialization

                        using (BsonReader reader = new BsonReader(responseStream))
                        {
                            reader.ReadRootValueAsArray = true;
                            JsonSerializer   bsonDeserializer = new JsonSerializer();
                            TimeSeriesData[] timeSeries       = bsonDeserializer.Deserialize <TimeSeriesData[]>(reader);
                            stopwatch.Stop();
                            deserializationTime += stopwatch.ElapsedMilliseconds;
                            stopwatch.Reset();
                        }
                    }
                }

                measurementResult.DataPoints = i;
                measurementResult.TransferAndSerializationTime = transferTime / sampleSize;
                measurementResult.DeserializationTime          = deserializationTime / sampleSize;
                measurementResult.FileSize = fileSize / sampleSize;
                totalMeasurementResult.ResultList.Add(measurementResult);
            }

            return(totalMeasurementResult);
        }
예제 #25
0
 public void Display(MeasurementResult value)
 {
     _sender.Send(value.ToViewModel());
 }
        private MeasurementResult CloneMeasurementResult(MeasurementResult previousVersionMeasurementResult, Result newVersionResult)
        {
            if (previousVersionMeasurementResult == null)
            {
                return null;
            }
            else
            {
                var newVersionMeasurementResult = new MeasurementResult();
                newVersionMeasurementResult.Result = newVersionResult;
                newVersionMeasurementResult.AggregationStatisticCV = previousVersionMeasurementResult.AggregationStatisticCV;
                newVersionMeasurementResult.CV_AggregationStatistic = previousVersionMeasurementResult.CV_AggregationStatistic;
                newVersionMeasurementResult.CensorCodeCV = previousVersionMeasurementResult.CensorCodeCV;
                newVersionMeasurementResult.CV_CensorCode = previousVersionMeasurementResult.CV_CensorCode;
                newVersionMeasurementResult.QualityCodeCV = previousVersionMeasurementResult.QualityCodeCV;
                newVersionMeasurementResult.CV_QualityCode = previousVersionMeasurementResult.CV_QualityCode;
                
                newVersionMeasurementResult.SpatialReference = previousVersionMeasurementResult.SpatialReference;
                newVersionMeasurementResult.SpatialReferenceID = previousVersionMeasurementResult.SpatialReferenceID;
                newVersionMeasurementResult.TimeAggregationInterval = previousVersionMeasurementResult.TimeAggregationInterval;
                newVersionMeasurementResult.TimeAggregationIntervalUnitsID = previousVersionMeasurementResult.TimeAggregationIntervalUnitsID;
                newVersionMeasurementResult.Unit = previousVersionMeasurementResult.Unit;
                newVersionMeasurementResult.Unit1 = previousVersionMeasurementResult.Unit1;
                newVersionMeasurementResult.Unit2 = previousVersionMeasurementResult.Unit2;
                newVersionMeasurementResult.Unit3 = previousVersionMeasurementResult.Unit3;
                newVersionMeasurementResult.XLocation = previousVersionMeasurementResult.XLocation;
                newVersionMeasurementResult.XLocationUnitsID = previousVersionMeasurementResult.XLocationUnitsID;
                newVersionMeasurementResult.YLocation = previousVersionMeasurementResult.YLocation;
                newVersionMeasurementResult.YLocationUnitsID = previousVersionMeasurementResult.YLocationUnitsID;
                newVersionMeasurementResult.ZLocation = previousVersionMeasurementResult.ZLocation;
                newVersionMeasurementResult.ZLocationUnitsID = previousVersionMeasurementResult.ZLocationUnitsID;
                
                if(previousVersionMeasurementResult.MeasurementResultValues != null)
                {
                    newVersionMeasurementResult.MeasurementResultValues = new List<MeasurementResultValue>();
                    foreach(var previousMeasurementResultValue in previousVersionMeasurementResult.MeasurementResultValues)
                    {
                        var newMeasurementResultValue = new MeasurementResultValue();
                        newMeasurementResultValue.MeasurementResult = newVersionMeasurementResult;
                        newMeasurementResultValue.DataValue = previousMeasurementResultValue.DataValue;
                        newMeasurementResultValue.ValueDateTime = previousMeasurementResultValue.ValueDateTime;
                        newMeasurementResultValue.ValueDateTimeUTCOffset = previousMeasurementResultValue.ValueDateTimeUTCOffset;

                        newVersionMeasurementResult.MeasurementResultValues.Add(newMeasurementResultValue);
                    }
                }

                return newVersionMeasurementResult;
            }
        }
        public static void Link(MeasurementResult measurementResult, MeasurementResultValue measurementResultValue)
        {
            measurementResult.MeasurementResultValues.Add(measurementResultValue);

            measurementResultValue.MeasurementResult = measurementResult;
        }
        public static void Link(MeasurementResult measurementResult, Unit unit)
        {
            measurementResult.Unit = unit;

            unit.MeasurementResults.Add(measurementResult);
        }