@@ -118,4 +118,199 @@ public void SerializationOfTypeWithRecursivePropertyTest()
118118
119119 Assert . Contains ( "next: next;" , linkedListType . ToString ( ) ) ;
120120 }
121+
122+ [ Fact ]
123+ public void IsSubsetOf_SubsetHasFewerProperties_ReturnsTrue ( )
124+ {
125+ // Arrange
126+ var number = new Type ( "number" ) ;
127+ var supersetType = new ObjectType ( new Dictionary < string , Type >
128+ {
129+ [ "x" ] = number ,
130+ [ "y" ] = number ,
131+ [ "z" ] = number
132+ } ) ;
133+ var subsetType = new ObjectType ( new Dictionary < string , Type >
134+ {
135+ [ "x" ] = number ,
136+ [ "y" ] = number
137+ } ) ;
138+
139+ // Act
140+ var result = supersetType . IsSubsetOf ( subsetType ) ;
141+
142+ // Assert
143+ Assert . True ( result ) ;
144+ }
145+
146+ [ Fact ]
147+ public void IsSubsetOf_SubsetHasSameProperties_ReturnsTrue ( )
148+ {
149+ // Arrange
150+ var number = new Type ( "number" ) ;
151+ var supersetType = new ObjectType ( new Dictionary < string , Type >
152+ {
153+ [ "x" ] = number ,
154+ [ "y" ] = number
155+ } ) ;
156+ var subsetType = new ObjectType ( new Dictionary < string , Type >
157+ {
158+ [ "x" ] = number ,
159+ [ "y" ] = number
160+ } ) ;
161+
162+ // Act
163+ var result = supersetType . IsSubsetOf ( subsetType ) ;
164+
165+ // Assert
166+ Assert . True ( result ) ;
167+ }
168+
169+ [ Fact ]
170+ public void IsSubsetOf_SubsetHasExtraProperties_ReturnsFalse ( )
171+ {
172+ // Arrange
173+ var number = new Type ( "number" ) ;
174+ var supersetType = new ObjectType ( new Dictionary < string , Type >
175+ {
176+ [ "x" ] = number ,
177+ [ "y" ] = number
178+ } ) ;
179+ var subsetType = new ObjectType ( new Dictionary < string , Type >
180+ {
181+ [ "x" ] = number ,
182+ [ "y" ] = number ,
183+ [ "z" ] = number
184+ } ) ;
185+
186+ // Act
187+ var result = supersetType . IsSubsetOf ( subsetType ) ;
188+
189+ // Assert
190+ Assert . False ( result ) ;
191+ }
192+
193+ [ Fact ]
194+ public void IsSubsetOf_PropertyTypesMismatch_ReturnsFalse ( )
195+ {
196+ // Arrange
197+ var number = new Type ( "number" ) ;
198+ var stringType = new Type ( "string" ) ;
199+ var supersetType = new ObjectType ( new Dictionary < string , Type >
200+ {
201+ [ "x" ] = number ,
202+ [ "y" ] = number
203+ } ) ;
204+ var subsetType = new ObjectType ( new Dictionary < string , Type >
205+ {
206+ [ "x" ] = number ,
207+ [ "y" ] = stringType
208+ } ) ;
209+
210+ // Act
211+ var result = supersetType . IsSubsetOf ( subsetType ) ;
212+
213+ // Assert
214+ Assert . False ( result ) ;
215+ }
216+
217+ [ Fact ]
218+ public void IsSubsetOf_EmptySubset_ReturnsTrue ( )
219+ {
220+ // Arrange
221+ var number = new Type ( "number" ) ;
222+ var supersetType = new ObjectType ( new Dictionary < string , Type >
223+ {
224+ [ "x" ] = number ,
225+ [ "y" ] = number
226+ } ) ;
227+ var emptySubsetType = new ObjectType ( new Dictionary < string , Type > ( ) ) ;
228+
229+ // Act
230+ var result = supersetType . IsSubsetOf ( emptySubsetType ) ;
231+
232+ // Assert
233+ Assert . True ( result ) ;
234+ }
235+
236+ [ Fact ]
237+ public void IsSubsetOf_SameObjectReference_ReturnsTrue ( )
238+ {
239+ // Arrange
240+ var number = new Type ( "number" ) ;
241+ var objectType = new ObjectType ( new Dictionary < string , Type >
242+ {
243+ [ "x" ] = number ,
244+ [ "y" ] = number
245+ } ) ;
246+
247+ // Act
248+ var result = objectType . IsSubsetOf ( objectType ) ;
249+
250+ // Assert
251+ Assert . True ( result ) ;
252+ }
253+
254+ [ Fact ]
255+ public void IsSubsetOf_ComplexNestedTypes_ReturnsTrue ( )
256+ {
257+ // Arrange
258+ var number = new Type ( "number" ) ;
259+ var nestedObject = new ObjectType ( new Dictionary < string , Type >
260+ {
261+ [ "a" ] = number ,
262+ [ "b" ] = number
263+ } ) ;
264+ var arrayType = new ArrayType ( number ) ;
265+
266+ var supersetType = new ObjectType ( new Dictionary < string , Type >
267+ {
268+ [ "nested" ] = nestedObject ,
269+ [ "array" ] = arrayType ,
270+ [ "simple" ] = number
271+ } ) ;
272+ var subsetType = new ObjectType ( new Dictionary < string , Type >
273+ {
274+ [ "nested" ] = nestedObject ,
275+ [ "array" ] = arrayType
276+ } ) ;
277+
278+ // Act
279+ var result = supersetType . IsSubsetOf ( subsetType ) ;
280+
281+ // Assert
282+ Assert . True ( result ) ;
283+ }
284+
285+ [ Fact ]
286+ public void IsSubsetOf_ComplexNestedTypesMismatch_ReturnsFalse ( )
287+ {
288+ // Arrange
289+ var number = new Type ( "number" ) ;
290+ var nestedObject1 = new ObjectType ( new Dictionary < string , Type >
291+ {
292+ [ "a" ] = number ,
293+ [ "b" ] = number
294+ } ) ;
295+ var nestedObject2 = new ObjectType ( new Dictionary < string , Type >
296+ {
297+ [ "a" ] = number ,
298+ [ "c" ] = number
299+ } ) ;
300+
301+ var supersetType = new ObjectType ( new Dictionary < string , Type >
302+ {
303+ [ "nested" ] = nestedObject1
304+ } ) ;
305+ var subsetType = new ObjectType ( new Dictionary < string , Type >
306+ {
307+ [ "nested" ] = nestedObject2
308+ } ) ;
309+
310+ // Act
311+ var result = supersetType . IsSubsetOf ( subsetType ) ;
312+
313+ // Assert
314+ Assert . False ( result ) ;
315+ }
121316}
0 commit comments