| // Copyright 2010 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package cgotest |
| |
| /* |
| #include <stdio.h> |
| |
| typedef unsigned char Uint8; |
| typedef unsigned short Uint16; |
| |
| typedef enum { |
| MOD1 = 0x0000, |
| MODX = 0x8000 |
| } SDLMod; |
| |
| typedef enum { |
| A = 1, |
| B = 322, |
| SDLK_LAST |
| } SDLKey; |
| |
| typedef struct SDL_keysym { |
| Uint8 scancode; |
| SDLKey sym; |
| SDLMod mod; |
| Uint16 unicode; |
| } SDL_keysym; |
| |
| typedef struct SDL_KeyboardEvent { |
| Uint8 typ; |
| Uint8 which; |
| Uint8 state; |
| SDL_keysym keysym; |
| } SDL_KeyboardEvent; |
| |
| void makeEvent(SDL_KeyboardEvent *event) { |
| unsigned char *p; |
| int i; |
| |
| p = (unsigned char*)event; |
| for (i=0; i<sizeof *event; i++) { |
| p[i] = i; |
| } |
| } |
| |
| int same(SDL_KeyboardEvent* e, Uint8 typ, Uint8 which, Uint8 state, Uint8 scan, SDLKey sym, SDLMod mod, Uint16 uni) { |
| return e->typ == typ && e->which == which && e->state == state && e->keysym.scancode == scan && e->keysym.sym == sym && e->keysym.mod == mod && e->keysym.unicode == uni; |
| } |
| |
| void cTest(SDL_KeyboardEvent *event) { |
| printf("C: %#x %#x %#x %#x %#x %#x %#x\n", event->typ, event->which, event->state, |
| event->keysym.scancode, event->keysym.sym, event->keysym.mod, event->keysym.unicode); |
| fflush(stdout); |
| } |
| |
| */ |
| import "C" |
| |
| import ( |
| "testing" |
| ) |
| |
| func testAlign(t *testing.T) { |
| var evt C.SDL_KeyboardEvent |
| C.makeEvent(&evt) |
| if C.same(&evt, evt.typ, evt.which, evt.state, evt.keysym.scancode, evt.keysym.sym, evt.keysym.mod, evt.keysym.unicode) == 0 { |
| t.Error("*** bad alignment") |
| C.cTest(&evt) |
| t.Errorf("Go: %#x %#x %#x %#x %#x %#x %#x\n", |
| evt.typ, evt.which, evt.state, evt.keysym.scancode, |
| evt.keysym.sym, evt.keysym.mod, evt.keysym.unicode) |
| t.Error(evt) |
| } |
| } |