1// Copyright 2010 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package cgotest 6 7/* 8#include <stdio.h> 9 10typedef unsigned char Uint8; 11typedef unsigned short Uint16; 12 13typedef enum { 14 MOD1 = 0x0000, 15 MODX = 0x8000 16} SDLMod; 17 18typedef enum { 19 A = 1, 20 B = 322, 21 SDLK_LAST 22} SDLKey; 23 24typedef struct SDL_keysym { 25 Uint8 scancode; 26 SDLKey sym; 27 SDLMod mod; 28 Uint16 unicode; 29} SDL_keysym; 30 31typedef struct SDL_KeyboardEvent { 32 Uint8 typ; 33 Uint8 which; 34 Uint8 state; 35 SDL_keysym keysym; 36} SDL_KeyboardEvent; 37 38void makeEvent(SDL_KeyboardEvent *event) { 39 unsigned char *p; 40 int i; 41 42 p = (unsigned char*)event; 43 for (i=0; i<sizeof *event; i++) { 44 p[i] = i; 45 } 46} 47 48int same(SDL_KeyboardEvent* e, Uint8 typ, Uint8 which, Uint8 state, Uint8 scan, SDLKey sym, SDLMod mod, Uint16 uni) { 49 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; 50} 51 52void cTest(SDL_KeyboardEvent *event) { 53 printf("C: %#x %#x %#x %#x %#x %#x %#x\n", event->typ, event->which, event->state, 54 event->keysym.scancode, event->keysym.sym, event->keysym.mod, event->keysym.unicode); 55 fflush(stdout); 56} 57 58*/ 59import "C" 60 61import ( 62 "testing" 63) 64 65func testAlign(t *testing.T) { 66 var evt C.SDL_KeyboardEvent 67 C.makeEvent(&evt) 68 if C.same(&evt, evt.typ, evt.which, evt.state, evt.keysym.scancode, evt.keysym.sym, evt.keysym.mod, evt.keysym.unicode) == 0 { 69 t.Error("*** bad alignment") 70 C.cTest(&evt) 71 t.Errorf("Go: %#x %#x %#x %#x %#x %#x %#x\n", 72 evt.typ, evt.which, evt.state, evt.keysym.scancode, 73 evt.keysym.sym, evt.keysym.mod, evt.keysym.unicode) 74 t.Error(evt) 75 } 76} 77