@@ -176,6 +176,52 @@ public void TestWriteNode()
176176 Assert . AreEqual ( sourceNode . Latitude . Value , resultNode . Latitude . Value , .0001f ) ;
177177 Assert . AreEqual ( sourceNode . Longitude . Value , resultNode . Longitude . Value , .0001f ) ;
178178 }
179+
180+ sourceObjects = new OsmGeo [ ] {
181+ new Node ( )
182+ {
183+ Id = 1 ,
184+ Latitude = 1f ,
185+ Longitude = 1f ,
186+ ChangeSetId = 1092 ,
187+ TimeStamp = DateTime . UnixEpoch ,
188+ UserId = 9034 ,
189+ Version = 12
190+ } ,
191+ new Node ( )
192+ {
193+ Id = 2 ,
194+ Latitude = 2f ,
195+ Longitude = 2f ,
196+ ChangeSetId = 1093 ,
197+ TimeStamp = DateTime . Now ,
198+ UserId = 9035 ,
199+ Version = 13
200+ } ,
201+ new Node ( )
202+ {
203+ Id = 3 ,
204+ Latitude = 3f ,
205+ Longitude = 3f ,
206+ ChangeSetId = 1094 ,
207+ TimeStamp = DateTime . UtcNow ,
208+ UserId = 9036 ,
209+ Version = 14
210+ }
211+ } ;
212+
213+ // build PBF stream target.
214+ using ( var stream = new MemoryStream ( ) )
215+ {
216+ var target = new PBFOsmStreamTarget ( stream ) ;
217+ target . RegisterSource ( sourceObjects ) ;
218+ target . Pull ( ) ;
219+
220+ stream . Seek ( 0 , SeekOrigin . Begin ) ;
221+ var resultObjects = new List < OsmGeo > ( new PBFOsmStreamSource ( stream ) ) ;
222+
223+ AreEqual ( sourceObjects , resultObjects ) ;
224+ }
179225 }
180226
181227 /// <summary>
@@ -636,5 +682,62 @@ public void TestReadWriteCompressedRead_ShouldSucceed()
636682 Assert . AreEqual ( 1715 , new PBFOsmStreamSource ( memoryStream ) . Count ( n => n is Node ) ) ;
637683 }
638684 }
685+
686+
687+ /// <summary>
688+ /// Test helper to test if 2 OsmGeo arrays are equal.
689+ /// </summary>
690+ private static void AreEqual ( IEnumerable < OsmGeo > sourceObjects , IEnumerable < OsmGeo > resultObjects )
691+ {
692+ Assert . IsNotNull ( resultObjects ) ;
693+ var sourceArray = sourceObjects . ToArray ( ) ;
694+ var resultArray = resultObjects . ToArray ( ) ;
695+ Assert . AreEqual ( sourceArray . Length , resultArray . Length ) ;
696+ for ( int i = 0 ; i < sourceArray . Length ; i ++ )
697+ {
698+ AreEqual ( sourceArray [ i ] , resultArray [ i ] ) ;
699+ }
700+ }
701+
702+ /// <summary>
703+ /// Test helper to test if 2 OsmGeos are equal.
704+ /// </summary>
705+ private static void AreEqual ( OsmGeo sourceObject , OsmGeo resultObject )
706+ {
707+ Assert . AreEqual ( sourceObject . Id , resultObject . Id ) ;
708+ Assert . AreEqual ( sourceObject . ChangeSetId , resultObject . ChangeSetId ) ;
709+ Assert . AreEqual ( sourceObject . TimeStamp . Value . Ticks , resultObject . TimeStamp . Value . Ticks , 10000000 ) ;
710+ Assert . AreEqual ( sourceObject . UserId , resultObject . UserId ) ;
711+ Assert . AreEqual ( sourceObject . UserName , resultObject . UserName ) ;
712+ Assert . AreEqual ( sourceObject . Version , resultObject . Version ) ;
713+ Assert . AreEqual ( sourceObject . Tags ? . Count ?? 0 , resultObject . Tags ? . Count ?? 0 ) ;
714+ foreach ( var sourceTag in sourceObject . Tags ?? new TagsCollection ( ) )
715+ {
716+ Assert . IsTrue ( resultObject . Tags . Contains ( sourceTag ) ) ;
717+ }
718+ switch ( sourceObject )
719+ {
720+ case Node sourceNode :
721+ var resultNode = ( Node ) resultObject ;
722+ Assert . AreEqual ( sourceNode . Latitude . Value , resultNode . Latitude . Value , .0001f ) ;
723+ Assert . AreEqual ( sourceNode . Longitude . Value , resultNode . Longitude . Value , .0001f ) ;
724+ break ;
725+ case Way sourceWay :
726+ var resultWay = ( Way ) resultObject ;
727+ Assert . IsTrue ( sourceWay . Nodes . SequenceEqual ( resultWay . Nodes ) ) ;
728+ break ;
729+ case Relation sourceRelation :
730+ var resultRelation = ( Relation ) resultObject ;
731+ Assert . AreEqual ( sourceRelation . Members . Length , resultRelation . Members . Length ) ;
732+ for ( int i = 0 ; i < sourceRelation . Members . Length ; i ++ )
733+ {
734+ Assert . AreEqual ( sourceRelation . Members [ i ] . Type , resultRelation . Members [ i ] . Type ) ;
735+ Assert . AreEqual ( sourceRelation . Members [ i ] . Id , resultRelation . Members [ i ] . Id ) ;
736+ Assert . AreEqual ( sourceRelation . Members [ i ] . Role , resultRelation . Members [ i ] . Role ) ;
737+ }
738+ break ;
739+ }
740+ }
741+
639742 }
640743}
0 commit comments