@@ -105,6 +105,40 @@ import Base.Order.Reverse
105105 @test_throws ArgumentError PriorityQueue (Reverse, Reverse)
106106 end
107107
108+ @testset " Strange eltype situations" begin
109+ @testset " Eltype unknown" begin
110+ struct EltypeUnknownIterator{T}
111+ x:: T
112+ end
113+ Base. IteratorEltype (:: EltypeUnknownIterator ) = Base. EltypeUnknown ()
114+ Base. iterate (i:: EltypeUnknownIterator ) = Base. iterate (i. x)
115+ Base. iterate (i:: EltypeUnknownIterator , state) = Base. iterate (i. x, state)
116+ Base. IteratorSize (i:: EltypeUnknownIterator ) = Base. IteratorSize (i. x)
117+ Base. length (i:: EltypeUnknownIterator ) = Base. length (i. x)
118+ Base. size (i:: EltypeUnknownIterator ) = Base. size (i. x)
119+
120+ @test_nowarn PriorityQueue (Dict (zip (1 : 5 , 2 : 6 )))
121+ @test_nowarn PriorityQueue (EltypeUnknownIterator (Dict (zip (1 : 5 , 2 : 6 ))))
122+ @test_throws ArgumentError PriorityQueue (EltypeUnknownIterator ([' a' ]))
123+ end
124+
125+ @testset " Eltype any" begin
126+ struct EltypeAnyIterator{T}
127+ x:: T
128+ end
129+ Base. IteratorEltype (:: EltypeAnyIterator ) = Base. HasEltype ()
130+ Base. eltype (:: EltypeAnyIterator ) = Any
131+ Base. iterate (i:: EltypeAnyIterator ) = Base. iterate (i. x)
132+ Base. iterate (i:: EltypeAnyIterator , state) = Base. iterate (i. x, state)
133+ Base. IteratorSize (i:: EltypeAnyIterator ) = Base. IteratorSize (i. x)
134+ Base. length (i:: EltypeAnyIterator ) = Base. length (i. x)
135+ Base. size (i:: EltypeAnyIterator ) = Base. size (i. x)
136+
137+ @test_nowarn PriorityQueue (EltypeAnyIterator (Dict (zip (1 : 5 , 2 : 6 ))))
138+ @test_throws ArgumentError PriorityQueue (EltypeAnyIterator ([' a' ]))
139+ end
140+ end
141+
108142 end
109143
110144 @testset " PriorityQueueMethods" begin
0 commit comments