protected void CompareLists(IEnumerable <FindPTZPositionResult> list1, IEnumerable <FindPTZPositionResult> list2, string descr1, string descr2) { bool ok = true; StringBuilder dump = new StringBuilder(); Dictionary <FindPTZPositionResult, FindPTZPositionResult> intersection = new Dictionary <FindPTZPositionResult, FindPTZPositionResult>(); Func <FindPTZPositionResult, string> getDescription = new Func <FindPTZPositionResult, string>( (info) => { return(string.Format("Result with Time={0}, RecordingToken='{1}', TrackToken='{2}'", info.Time, info.RecordingToken, info.TrackToken)); }); // check results in list1, find results that are not in list2, // find results that are in both lists (intersection) foreach (FindPTZPositionResult result1 in list1) { string descr = getDescription(result1); FindPTZPositionResult result2 = list2.FirstOrDefault(R => AreTheSame(result1, R)); if (result2 == null) { ok = false; dump.AppendFormat("{0} not found in {1}{2}", descr, descr2, Environment.NewLine); } else { intersection.Add(result1, result2); } } // check results in list2, find results that are not in list1 foreach (FindPTZPositionResult result2 in list2) { string descr = getDescription(result2); FindPTZPositionResult result1 = list1.FirstOrDefault(R => AreTheSame(result2, R)); if (result1 == null) { ok = false; dump.AppendFormat("{0} not found in {1}{2}", descr, descr1, Environment.NewLine); } } // compare results in intersection is impossible now. // It seems that there are no field which could be compared. // Time, RecordingToken, TrackToken, Position are keys... Assert(ok, dump.ToStringTrimNewLine(), "Check that PTZ positions lists are the same"); }
void GeneratePtzPositions() { _ptzPositions = new List <FindPTZPositionResult>(); { FindPTZPositionResult result = new FindPTZPositionResult(); result.RecordingToken = Recordings[0].RecordingToken; result.TrackToken = Recordings[0].Track[0].TrackToken; result.Time = Recordings[0].EarliestRecording.AddMinutes(10); result.Position = new PTZVector(); result.Position.PanTilt = new Vector2D(); result.Position.PanTilt.x = 0; result.Position.PanTilt.y = 1; _ptzPositions.Add(result); } { FindPTZPositionResult result = new FindPTZPositionResult(); result.RecordingToken = Recordings[0].RecordingToken; result.TrackToken = Recordings[0].Track[0].TrackToken; result.Time = Recordings[0].EarliestRecording.AddMinutes(12); result.Position = new PTZVector(); result.Position.PanTilt = new Vector2D(); result.Position.PanTilt.x = 0.5F; result.Position.PanTilt.y = 0.5F; _ptzPositions.Add(result); } }
bool AreTheSame(FindPTZPositionResult result1, FindPTZPositionResult result2) { bool equal = result1.Time == result2.Time && result1.RecordingToken == result2.RecordingToken && result1.TrackToken == result2.TrackToken; if (equal) { // ToDo : How to compare PTZ positions ? // (is it possible that they will be returned for different space ? ) bool positionsEqual = true; if (result1.Position != null && result2.Position != null) { Vector2D panTilt1 = result1.Position.PanTilt; Vector2D panTilt2 = result2.Position.PanTilt; if (panTilt1 != null && panTilt2 != null) { positionsEqual = panTilt1.space == panTilt2.space && panTilt1.x == panTilt2.x && panTilt1.y == panTilt2.y; } else { if (panTilt1 != null || panTilt2 != null) { positionsEqual = false; } } if (positionsEqual) { Vector1D zoom1 = result1.Position.Zoom; Vector1D zoom2 = result2.Position.Zoom; if (zoom1 != null && zoom2 != null) { positionsEqual = zoom1.space == zoom2.space && zoom1.x == zoom2.x; } else { if (zoom1 != null || zoom2 != null) { positionsEqual = false; } } } } else { if (result1.Position != null || result2.Position != null) { positionsEqual = false; } // else both null - OK } equal = positionsEqual; } return(equal); }
public void PTZSearchForCertainPositionTest() { string searchToken = string.Empty; SearchState state = SearchState.Completed; int testKeepAlive = _searchKeepAlive; RunTest( () => { string keepAlive = string.Format("PT{0}S", testKeepAlive); RecordingInformation recording = FindRecordingForTest(); SearchRange range = DefineSearchRange(recording); System.DateTime start = range.Start; System.DateTime end = range.End; PTZPositionFilter filter = new PTZPositionFilter(); filter.MinPosition = new PTZVector(); filter.MinPosition.PanTilt = new Vector2D() { x = -1, y = -1 }; filter.MaxPosition = new PTZVector(); filter.MaxPosition.PanTilt = new Vector2D() { x = 1, y = 1 }; SearchScope scope = new SearchScope(); scope.IncludedRecordings = new string[] { recording.RecordingToken }; List <FindPTZPositionResult> results = new List <FindPTZPositionResult>(); state = SearchState.Completed; searchToken = FindPTZPosition(end, start, scope, filter, null, keepAlive); results = GetAllPtzSearchResults(searchToken, filter, 1, null, "PT5S", out state); Assert(results != null && results.Count > 0, "No PTZ positions found", "Check that PTZ positions list is not empty"); /// check that results belong to specified recording? ValidatePTZPositionResults(results, recording, start, end); FindPTZPositionResult result = results.FirstOrDefault(R => R.Position != null); Assert(result != null, "No search results with PTZ position returned", "Select PTZ position for test"); filter.MinPosition = result.Position; filter.MaxPosition = result.Position; filter.EnterOrExit = false; state = SearchState.Completed; searchToken = FindPTZPosition(end, start, scope, filter, null, keepAlive, "Find specified PTZ position"); results = GetAllPtzSearchResults(searchToken, filter, 1, null, "PT5S", out state); Assert(results != null && results.Count > 0, "No PTZ positions found", "Check that PTZ positions list is not empty"); /// check that results belong to specified recording? ValidatePTZPositionResults(results, recording, start, end); bool ok = true; StringBuilder sb = new StringBuilder(); foreach (FindPTZPositionResult r in results) { // compare positions - ? if (r.Position == null) { ok = false; sb.AppendLine( string.Format("Result for {0} contains no PTZ position", r.Time.StdDateTimeToString())); } else { if (r.Position.PanTilt == null) { ok = false; sb.AppendLine( string.Format("Result for {0} contains no PanTilt in PTZ position", r.Time.StdDateTimeToString())); } else { ok = (r.Position.PanTilt.x == result.Position.PanTilt.x && r.Position.PanTilt.y == result.Position.PanTilt.y && r.Position.PanTilt.space == result.Position.PanTilt.space); if (!ok) { sb.AppendLine( string.Format("Position in result for {0} is not as expected: PanTilt.x={1}, PanTilt.y={2}, PanTilt.space='{3}'", r.Time.StdDateTimeToString(), r.Position.PanTilt.x, r.Position.PanTilt.y, r.Position.PanTilt.space)); } } } } Assert(ok, sb.ToStringTrimNewLine(), "Check PTZ Positions returned"); }, () => { if (state != SearchState.Completed) { ReleaseSearch(searchToken, testKeepAlive * 1000); } }); }