Upodate e2e tests
This commit is contained in:
parent
3a68154ae5
commit
b723ff2d06
@ -1,7 +0,0 @@
|
||||
fn foo() -> f32 { return 1.0; }
|
||||
|
||||
fn main() -> u8 {
|
||||
let mut a = 0;
|
||||
a = (foo() * 1.0) as u8;
|
||||
return a;
|
||||
}
|
153
graphics.reid
153
graphics.reid
@ -1,153 +0,0 @@
|
||||
struct StringBuffer {
|
||||
buffer: [char; 64],
|
||||
}
|
||||
|
||||
struct SDL_Thing {} // TODO: replace with proper dummy structs now that we can cast
|
||||
struct SDL_FRect { x: f32, y: f32, w: f32, h: f32 }
|
||||
struct SDL_Rect { x: i32, y: i32, w: i32, h: i32 }
|
||||
extern fn SDL_malloc(size: u64) -> *SDL_Thing;
|
||||
extern fn SDL_Init(flags: u32) -> bool;
|
||||
extern fn SDL_Quit();
|
||||
extern fn SDL_CreateWindowAndRenderer(title: *char, width: i32, height: i32, flags: i32,
|
||||
window_out: &mut *SDL_Thing, renderer_out: &mut *SDL_Thing) -> bool;
|
||||
extern fn SDL_Delay(ms: u32);
|
||||
extern fn SDL_SetRenderDrawColor(renderer: *SDL_Thing, r: u8, g: u8, b: u8, a: u8);
|
||||
extern fn SDL_RenderClear(renderer: *SDL_Thing);
|
||||
extern fn SDL_RenderPresent(renderer: *SDL_Thing);
|
||||
extern fn SDL_HasEvent(event_type: u32) -> bool;
|
||||
extern fn SDL_PumpEvents();
|
||||
extern fn SDL_FlushEvents(min_type: u32, max_type: u32);
|
||||
extern fn SDL_GetTicks() -> u64;
|
||||
extern fn SDL_snprintf(text: &mut StringBuffer, maxlen: u64, fmt: *char, var: u64) -> i32;
|
||||
extern fn SDL_SetWindowTitle(window: *SDL_Thing, title: &StringBuffer) -> bool;
|
||||
extern fn SDL_CreateTexture(renderer: *SDL_Thing,
|
||||
pixel_format: u32, texture_access: u32, width: u32, height: u32) -> *SDL_Thing;
|
||||
extern fn SDL_RenderTexture(renderer: *SDL_Thing,
|
||||
texture: *SDL_Thing, srcfrect: &SDL_FRect, dstfrect: &SDL_FRect) -> bool;
|
||||
extern fn SDL_UpdateTexture(texture: *SDL_Thing, rect: &SDL_Rect, pixels: *u8, pitch: u32) -> bool;
|
||||
extern fn SDL_Log(fmt: *char, string_var: *char);
|
||||
extern fn SDL_GetError() -> *char;
|
||||
extern fn SDL_GetWindowSize(window: *SDL_Thing, w: &mut i32, h: &mut i32) -> bool;
|
||||
|
||||
struct GameState {
|
||||
renderer: *SDL_Thing,
|
||||
window: *SDL_Thing,
|
||||
render_texture: *SDL_Thing,
|
||||
frame_counter: u64,
|
||||
pixels: *u8,
|
||||
pixels_w: u32,
|
||||
pixels_h: u32,
|
||||
}
|
||||
|
||||
fn main() -> i32 {
|
||||
let SDL_INIT_VIDEO = 32;
|
||||
let SDL_WINDOW_RESIZABLE = 32;
|
||||
let SDL_PIXELFORMAT_RGBA8888 = 373694468;
|
||||
let SDL_PIXELFORMAT_ABGR8888 = 376840196;
|
||||
let SDL_TEXTUREACCESS_STREAMING = 1;
|
||||
|
||||
let init_success = SDL_Init(SDL_INIT_VIDEO);
|
||||
if init_success == false {
|
||||
SDL_Log("SDL init failed: %s", SDL_GetError());
|
||||
return 1;
|
||||
}
|
||||
|
||||
let mut window = placeholder_ptr();
|
||||
let mut renderer = placeholder_ptr();
|
||||
let gfx_init_success = SDL_CreateWindowAndRenderer(
|
||||
"graphical reid program", 640, 480, SDL_WINDOW_RESIZABLE,
|
||||
&mut window, &mut renderer
|
||||
);
|
||||
if gfx_init_success == false {
|
||||
SDL_Log("SDL renderer and window creation failed: %s", SDL_GetError());
|
||||
return 1;
|
||||
}
|
||||
|
||||
let width = 256;
|
||||
let height = 256;
|
||||
let render_texture = SDL_CreateTexture(renderer,
|
||||
SDL_PIXELFORMAT_ABGR8888, SDL_TEXTUREACCESS_STREAMING, width, height);
|
||||
|
||||
let pixels_len = (width * height * 4) as u64;
|
||||
let pixels = SDL_malloc(pixels_len) as *u8;
|
||||
let mut game_state = GameState {
|
||||
renderer: renderer,
|
||||
window: window,
|
||||
render_texture: render_texture,
|
||||
frame_counter: 0,
|
||||
pixels: pixels,
|
||||
pixels_w: width,
|
||||
pixels_h: height,
|
||||
};
|
||||
|
||||
frame_loop(game_state);
|
||||
|
||||
// TODO: maybe clean up resources here but also it's a bit of a waste of energy
|
||||
SDL_Quit();
|
||||
return 0;
|
||||
}
|
||||
|
||||
fn frame_loop(game_state: GameState) -> GameState {
|
||||
SDL_PumpEvents();
|
||||
if SDL_HasEvent(256) { // SDL_EVENT_QUIT
|
||||
return game_state;
|
||||
}
|
||||
SDL_FlushEvents(0, 4294967296);
|
||||
|
||||
let mut screen_width = 0;
|
||||
let mut screen_height = 0;
|
||||
SDL_GetWindowSize(game_state.window, &mut screen_width, &mut screen_height);
|
||||
|
||||
let renderer = game_state.renderer;
|
||||
SDL_SetRenderDrawColor(renderer, 0, 50, 90, 255);
|
||||
SDL_RenderClear(renderer);
|
||||
|
||||
let w = game_state.pixels_w;
|
||||
let h = game_state.pixels_h;
|
||||
draw_pixels(game_state.pixels, 0, 0, w, h, game_state.frame_counter);
|
||||
let texture_area = SDL_Rect { x: 0, y: 0, w: w as i32, h: h as i32 };
|
||||
if SDL_UpdateTexture(game_state.render_texture, &texture_area, game_state.pixels, 4 * w) == false {
|
||||
SDL_Log("UpdateTexture error: %s", SDL_GetError());
|
||||
}
|
||||
let src = SDL_FRect { x: 0.0, y: 0.0, w: w as f32, h: h as f32 };
|
||||
let dst = SDL_FRect { x: 0.0, y: 0.0, w: screen_width as f32, h: screen_height as f32 };
|
||||
if SDL_RenderTexture(renderer, game_state.render_texture, &src, &dst) == false {
|
||||
SDL_Log("RenderTexture error: %s", SDL_GetError());
|
||||
}
|
||||
|
||||
SDL_RenderPresent(renderer);
|
||||
SDL_Delay(16);
|
||||
|
||||
game_state.frame_counter = game_state.frame_counter + 1;
|
||||
let mut s = StringBuffer {};
|
||||
SDL_snprintf(&mut s, 64, "graphical reid program frame %u", game_state.frame_counter);
|
||||
SDL_SetWindowTitle(game_state.window, &s);
|
||||
|
||||
return frame_loop(game_state);
|
||||
}
|
||||
|
||||
fn placeholder_ptr() -> *SDL_Thing {
|
||||
return SDL_malloc(1);
|
||||
}
|
||||
|
||||
fn draw_pixels(pixels: *u8, x: u32, y: u32, w: u32, h: u32, frame_counter: u64) -> i32 {
|
||||
if y >= h {
|
||||
return 0;
|
||||
}
|
||||
let index = (x + y * w) * 4;
|
||||
|
||||
pixels[index + 0] = x as u8;
|
||||
pixels[index + 1] = y as u8;
|
||||
pixels[index + 2] = frame_counter as u8;
|
||||
pixels[index + 3] = 255;
|
||||
|
||||
let mut new_x = x + 1;
|
||||
let mut new_y = y;
|
||||
if new_x >= w {
|
||||
new_x = 0;
|
||||
new_y = y + 1;
|
||||
}
|
||||
|
||||
draw_pixels(pixels, new_x, new_y, w, h, frame_counter);
|
||||
return 0;
|
||||
}
|
@ -18,62 +18,67 @@ fn test(source: &str, name: &str) {
|
||||
));
|
||||
}
|
||||
|
||||
pub static ARRAY: &str = include_str!("../../examples/array.reid");
|
||||
pub static FIBONACCI: &str = include_str!("../../examples/fibonacci.reid");
|
||||
pub static HELLO_WORLD: &str = include_str!("../../examples/hello_world.reid");
|
||||
pub static MUTABLE: &str = include_str!("../../examples/mutable.reid");
|
||||
pub static STRINGS: &str = include_str!("../../examples/strings.reid");
|
||||
pub static STRUCTS: &str = include_str!("../../examples/struct.reid");
|
||||
pub static ARRAY_STRUCTS: &str = include_str!("../../examples/array_structs.reid");
|
||||
pub static BORROW: &str = include_str!("../../examples/borrow.reid");
|
||||
pub static ARITHMETIC: &str = include_str!("../../examples/arithmetic.reid");
|
||||
|
||||
#[test]
|
||||
fn arithmetic_compiles_well() {
|
||||
test(include_str!("../../examples/arithmetic.reid"), "test");
|
||||
}
|
||||
#[test]
|
||||
fn array_compiles_well() {
|
||||
test(ARRAY, "array");
|
||||
test(include_str!("../../examples/array.reid"), "test");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn fibonacci_compiles_well() {
|
||||
test(FIBONACCI, "fibonacci");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn hello_world_compiles_well() {
|
||||
test(HELLO_WORLD, "hello_world");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn mutable_compiles_well() {
|
||||
test(MUTABLE, "mutable");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn strings_compiles_well() {
|
||||
test(STRINGS, "strings");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn arrays_compiles_well() {
|
||||
test(ARRAY, "array");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn struct_compiles_well() {
|
||||
test(STRUCTS, "struct");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn array_structs_compiles_well() {
|
||||
test(ARRAY_STRUCTS, "array_structs");
|
||||
test(include_str!("../../examples/array_structs.reid"), "test");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn borrow_structs_compiles_well() {
|
||||
test(BORROW, "borrow");
|
||||
fn borrow_compiles_well() {
|
||||
test(include_str!("../../examples/borrow.reid"), "test");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn arithmetic_structs_compiles_well() {
|
||||
test(ARITHMETIC, "arithmetic");
|
||||
fn borrow_hard_compiles_well() {
|
||||
test(include_str!("../../examples/borrow_hard.reid"), "test");
|
||||
}
|
||||
#[test]
|
||||
fn cast_compiles_well() {
|
||||
test(include_str!("../../examples/cast.reid"), "test");
|
||||
}
|
||||
#[test]
|
||||
fn char_compiles_well() {
|
||||
test(include_str!("../../examples/char.reid"), "test");
|
||||
}
|
||||
#[test]
|
||||
fn div_mod_compiles_well() {
|
||||
test(include_str!("../../examples/div_mod.reid"), "test");
|
||||
}
|
||||
#[test]
|
||||
fn fibonacci_compiles_well() {
|
||||
test(include_str!("../../examples/fibonacci.reid"), "test");
|
||||
}
|
||||
#[test]
|
||||
fn float_compiles_well() {
|
||||
test(include_str!("../../examples/float.reid"), "test");
|
||||
}
|
||||
#[test]
|
||||
fn hello_world_compiles_well() {
|
||||
test(include_str!("../../examples/hello_world.reid"), "test");
|
||||
}
|
||||
#[test]
|
||||
fn mutable_compiles_well() {
|
||||
test(include_str!("../../examples/mutable.reid"), "test");
|
||||
}
|
||||
#[test]
|
||||
fn ptr_compiles_well() {
|
||||
test(include_str!("../../examples/ptr.reid"), "test");
|
||||
}
|
||||
#[test]
|
||||
fn std_test_compiles_well() {
|
||||
test(include_str!("../../examples/std_test.reid"), "test");
|
||||
}
|
||||
#[test]
|
||||
fn strings_compiles_well() {
|
||||
test(include_str!("../../examples/strings.reid"), "test");
|
||||
}
|
||||
#[test]
|
||||
fn struct_compiles_well() {
|
||||
test(include_str!("../../examples/struct.reid"), "test");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user