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