@@ -91,4 +91,209 @@ public void HIWORDTest()
9191 Assert . Equal ( ( ushort ) 0xFFFF , HIWORD ( 0xFFFF1234u ) ) ;
9292 Assert . Equal ( ( ushort ) 0x8000 , HIWORD ( 0x80000000u ) ) ;
9393 }
94+
95+ [ Fact ]
96+ public void GET_X_LPARAMTest ( )
97+ {
98+ unchecked
99+ {
100+ // Test positive coordinates
101+ Assert . Equal ( 0 , GET_X_LPARAM ( ( LPARAM ) ( nint ) 0x00000000 ) ) ;
102+ Assert . Equal ( 1 , GET_X_LPARAM ( ( LPARAM ) ( nint ) 0x00000001 ) ) ;
103+ Assert . Equal ( 0x1234 , GET_X_LPARAM ( ( LPARAM ) ( nint ) 0x56781234 ) ) ;
104+
105+ // Test negative coordinates (sign extension from short)
106+ Assert . Equal ( - 1 , GET_X_LPARAM ( ( LPARAM ) ( nint ) 0x0000FFFF ) ) ;
107+ Assert . Equal ( - 32768 , GET_X_LPARAM ( ( LPARAM ) ( nint ) 0x00008000 ) ) ;
108+
109+ // Test with various high word values
110+ Assert . Equal ( unchecked ( ( int ) ( short ) 0xABCD ) , GET_X_LPARAM ( ( LPARAM ) ( nint ) 0x1234ABCD ) ) ;
111+ }
112+ }
113+
114+ [ Fact ]
115+ public void GET_Y_LPARAMTest ( )
116+ {
117+ unchecked
118+ {
119+ // Test positive coordinates
120+ Assert . Equal ( 0 , GET_Y_LPARAM ( ( LPARAM ) ( nint ) 0x00000000 ) ) ;
121+ Assert . Equal ( 1 , GET_Y_LPARAM ( ( LPARAM ) ( nint ) 0x00010000 ) ) ;
122+ Assert . Equal ( 0x5678 , GET_Y_LPARAM ( ( LPARAM ) ( nint ) 0x56781234 ) ) ;
123+
124+ // Test negative coordinates (sign extension from short)
125+ Assert . Equal ( - 1 , GET_Y_LPARAM ( ( LPARAM ) ( nint ) 0xFFFF0000 ) ) ;
126+ Assert . Equal ( - 32768 , GET_Y_LPARAM ( ( LPARAM ) ( nint ) 0x80000000 ) ) ;
127+
128+ // Test with various low word values
129+ Assert . Equal ( 0x1234 , GET_Y_LPARAM ( ( LPARAM ) ( nint ) 0x1234ABCD ) ) ;
130+ }
131+ }
132+
133+ [ Fact ]
134+ public void MAKEPOINTSTest ( )
135+ {
136+ unchecked
137+ {
138+ // Test zero coordinates
139+ var p1 = MAKEPOINTS ( ( LPARAM ) ( nint ) 0x00000000 ) ;
140+ Assert . Equal ( ( short ) 0 , p1 . x ) ;
141+ Assert . Equal ( ( short ) 0 , p1 . y ) ;
142+
143+ // Test positive coordinates
144+ var p2 = MAKEPOINTS ( ( LPARAM ) ( nint ) 0x00010002 ) ;
145+ Assert . Equal ( ( short ) 2 , p2 . x ) ;
146+ Assert . Equal ( ( short ) 1 , p2 . y ) ;
147+
148+ var p3 = MAKEPOINTS ( ( LPARAM ) ( nint ) 0x56781234 ) ;
149+ Assert . Equal ( ( short ) 0x1234 , p3 . x ) ;
150+ Assert . Equal ( ( short ) 0x5678 , p3 . y ) ;
151+
152+ // Test negative coordinates
153+ var p4 = MAKEPOINTS ( ( LPARAM ) ( nint ) 0xFFFFFFFF ) ;
154+ Assert . Equal ( ( short ) - 1 , p4 . x ) ;
155+ Assert . Equal ( ( short ) - 1 , p4 . y ) ;
156+
157+ var p5 = MAKEPOINTS ( ( LPARAM ) ( nint ) 0x80008000 ) ;
158+ Assert . Equal ( ( short ) - 32768 , p5 . x ) ;
159+ Assert . Equal ( ( short ) - 32768 , p5 . y ) ;
160+ }
161+ }
162+
163+ [ Fact ]
164+ public void GET_WHEEL_DELTA_WPARAMTest ( )
165+ {
166+ unchecked
167+ {
168+ // Test positive wheel delta
169+ Assert . Equal ( ( short ) 120 , GET_WHEEL_DELTA_WPARAM ( ( WPARAM ) 0x00780000 ) ) ;
170+ Assert . Equal ( ( short ) 240 , GET_WHEEL_DELTA_WPARAM ( ( WPARAM ) 0x00F00000 ) ) ;
171+
172+ // Test negative wheel delta
173+ Assert . Equal ( ( short ) - 120 , GET_WHEEL_DELTA_WPARAM ( ( WPARAM ) 0xFF880000 ) ) ;
174+ Assert . Equal ( ( short ) - 240 , GET_WHEEL_DELTA_WPARAM ( ( WPARAM ) 0xFF100000 ) ) ;
175+
176+ // Test zero delta
177+ Assert . Equal ( ( short ) 0 , GET_WHEEL_DELTA_WPARAM ( ( WPARAM ) 0x00000000 ) ) ;
178+
179+ // Test with non-zero low word (low word should be ignored)
180+ Assert . Equal ( ( short ) 120 , GET_WHEEL_DELTA_WPARAM ( ( WPARAM ) 0x0078ABCD ) ) ;
181+ }
182+ }
183+
184+ [ Fact ]
185+ public void GET_APPCOMMAND_LPARAMTest ( )
186+ {
187+ unchecked
188+ {
189+ // Test extracting app command (HIWORD & ~FAPPCOMMAND_MASK)
190+ // FAPPCOMMAND_MASK = 0xF000
191+ Assert . Equal ( ( short ) 0 , GET_APPCOMMAND_LPARAM ( ( LPARAM ) ( nint ) 0x00000000 ) ) ;
192+ Assert . Equal ( ( short ) 1 , GET_APPCOMMAND_LPARAM ( ( LPARAM ) ( nint ) 0x00010000 ) ) ;
193+ Assert . Equal ( ( short ) 0x0FFF , GET_APPCOMMAND_LPARAM ( ( LPARAM ) ( nint ) 0x0FFF0000 ) ) ;
194+
195+ // Test with device bits set (should be masked out)
196+ Assert . Equal ( ( short ) 1 , GET_APPCOMMAND_LPARAM ( ( LPARAM ) ( nint ) 0x10010000 ) ) ;
197+ Assert . Equal ( ( short ) 1 , GET_APPCOMMAND_LPARAM ( ( LPARAM ) ( nint ) 0x20010000 ) ) ;
198+ Assert . Equal ( ( short ) 1 , GET_APPCOMMAND_LPARAM ( ( LPARAM ) ( nint ) 0xF0010000 ) ) ;
199+ }
200+ }
201+
202+ [ Fact ]
203+ public void GET_DEVICE_LPARAMTest ( )
204+ {
205+ unchecked
206+ {
207+ // Test extracting device type (HIWORD & FAPPCOMMAND_MASK)
208+ // FAPPCOMMAND_MASK = 0xF000
209+ Assert . Equal ( ( ushort ) 0x0000 , GET_DEVICE_LPARAM ( ( LPARAM ) ( nint ) 0x00000000 ) ) ;
210+ Assert . Equal ( ( ushort ) 0x1000 , GET_DEVICE_LPARAM ( ( LPARAM ) ( nint ) 0x10000000 ) ) ;
211+ Assert . Equal ( ( ushort ) 0x2000 , GET_DEVICE_LPARAM ( ( LPARAM ) ( nint ) 0x20000000 ) ) ;
212+ Assert . Equal ( ( ushort ) 0xF000 , GET_DEVICE_LPARAM ( ( LPARAM ) ( nint ) 0xF0000000 ) ) ;
213+
214+ // Test with app command bits set (should be masked out)
215+ Assert . Equal ( ( ushort ) 0x1000 , GET_DEVICE_LPARAM ( ( LPARAM ) ( nint ) 0x10FF0000 ) ) ;
216+ }
217+ }
218+
219+ [ Fact ]
220+ public void GET_FLAGS_LPARAMTest ( )
221+ {
222+ unchecked
223+ {
224+ // Test extracting flags from low word
225+ Assert . Equal ( ( ushort ) 0x0000 , GET_FLAGS_LPARAM ( ( LPARAM ) ( nint ) 0x00000000 ) ) ;
226+ Assert . Equal ( ( ushort ) 0x0001 , GET_FLAGS_LPARAM ( ( LPARAM ) ( nint ) 0x00000001 ) ) ;
227+ Assert . Equal ( ( ushort ) 0xFFFF , GET_FLAGS_LPARAM ( ( LPARAM ) ( nint ) 0x0000FFFF ) ) ;
228+ Assert . Equal ( ( ushort ) 0x1234 , GET_FLAGS_LPARAM ( ( LPARAM ) ( nint ) 0x56781234 ) ) ;
229+
230+ // Test that high word is ignored
231+ Assert . Equal ( ( ushort ) 0xABCD , GET_FLAGS_LPARAM ( ( LPARAM ) ( nint ) 0xFFFFABCD ) ) ;
232+ }
233+ }
234+
235+ [ Fact ]
236+ public void GET_KEYSTATE_LPARAMTest ( )
237+ {
238+ unchecked
239+ {
240+ // Test extracting key state from low word
241+ Assert . Equal ( ( ushort ) 0x0000 , GET_KEYSTATE_LPARAM ( ( LPARAM ) ( nint ) 0x00000000 ) ) ;
242+ Assert . Equal ( ( ushort ) 0x0001 , GET_KEYSTATE_LPARAM ( ( LPARAM ) ( nint ) 0x00000001 ) ) ;
243+ Assert . Equal ( ( ushort ) 0xFFFF , GET_KEYSTATE_LPARAM ( ( LPARAM ) ( nint ) 0x0000FFFF ) ) ;
244+ Assert . Equal ( ( ushort ) 0x0004 , GET_KEYSTATE_LPARAM ( ( LPARAM ) ( nint ) 0x12340004 ) ) ;
245+
246+ // Test that high word is ignored
247+ Assert . Equal ( ( ushort ) 0x0008 , GET_KEYSTATE_LPARAM ( ( LPARAM ) ( nint ) 0xFFFF0008 ) ) ;
248+ }
249+ }
250+
251+ [ Fact ]
252+ public void GET_KEYSTATE_WPARAMTest ( )
253+ {
254+ unchecked
255+ {
256+ // Test extracting key state from low word of WPARAM
257+ Assert . Equal ( ( ushort ) 0x0000 , GET_KEYSTATE_WPARAM ( ( WPARAM ) 0x00000000 ) ) ;
258+ Assert . Equal ( ( ushort ) 0x0001 , GET_KEYSTATE_WPARAM ( ( WPARAM ) 0x00000001 ) ) ;
259+ Assert . Equal ( ( ushort ) 0xFFFF , GET_KEYSTATE_WPARAM ( ( WPARAM ) 0x0000FFFF ) ) ;
260+ Assert . Equal ( ( ushort ) 0x0008 , GET_KEYSTATE_WPARAM ( ( WPARAM ) 0x12340008 ) ) ;
261+
262+ // Test that high word is ignored
263+ Assert . Equal ( ( ushort ) 0x0004 , GET_KEYSTATE_WPARAM ( ( WPARAM ) 0xFFFF0004 ) ) ;
264+ }
265+ }
266+
267+ [ Fact ]
268+ public void GET_NCHITTEST_WPARAMTest ( )
269+ {
270+ unchecked
271+ {
272+ // Test extracting hit-test value from low word
273+ Assert . Equal ( ( short ) 0 , GET_NCHITTEST_WPARAM ( ( WPARAM ) 0x00000000 ) ) ;
274+ Assert . Equal ( ( short ) 1 , GET_NCHITTEST_WPARAM ( ( WPARAM ) 0x00000001 ) ) ;
275+ Assert . Equal ( ( short ) - 1 , GET_NCHITTEST_WPARAM ( ( WPARAM ) 0x0000FFFF ) ) ;
276+ Assert . Equal ( ( short ) 0x1234 , GET_NCHITTEST_WPARAM ( ( WPARAM ) 0x56781234 ) ) ;
277+
278+ // Test that high word is ignored
279+ Assert . Equal ( ( short ) 0x5678 , GET_NCHITTEST_WPARAM ( ( WPARAM ) 0xFFFF5678 ) ) ;
280+ }
281+ }
282+
283+ [ Fact ]
284+ public void GET_RAWINPUT_CODE_WPARAMTest ( )
285+ {
286+ unchecked
287+ {
288+ // Test extracting raw input code (lowest 8 bits only)
289+ Assert . Equal ( 0x00u , GET_RAWINPUT_CODE_WPARAM ( ( WPARAM ) 0x00000000 ) ) ;
290+ Assert . Equal ( 0x01u , GET_RAWINPUT_CODE_WPARAM ( ( WPARAM ) 0x00000001 ) ) ;
291+ Assert . Equal ( 0xFFu , GET_RAWINPUT_CODE_WPARAM ( ( WPARAM ) 0x0000FFFF ) ) ;
292+ Assert . Equal ( 0x12u , GET_RAWINPUT_CODE_WPARAM ( ( WPARAM ) 0xABCDEF12 ) ) ;
293+
294+ // Test that only lowest 8 bits are extracted
295+ Assert . Equal ( 0xABu , GET_RAWINPUT_CODE_WPARAM ( ( WPARAM ) 0x123456AB ) ) ;
296+ Assert . Equal ( 0x00u , GET_RAWINPUT_CODE_WPARAM ( ( WPARAM ) 0xFFFFFF00 ) ) ;
297+ }
298+ }
94299}
0 commit comments