cscg22-gearboy

CSCG 2022 Challenge 'Gearboy'
git clone https://git.sinitax.com/sinitax/cscg22-gearboy
Log | Files | Refs | sfeed.txt

testquit.c (2389B)


      1/*
      2  Copyright (C) 2013 Apoorv Upreti <apoorvupreti@gmail.com>
      3
      4  This software is provided 'as-is', without any express or implied
      5  warranty.  In no event will the authors be held liable for any damages
      6  arising from the use of this software.
      7
      8  Permission is granted to anyone to use this software for any purpose,
      9  including commercial applications, and to alter it and redistribute it
     10  freely.
     11*/
     12/* Quits, hangs or crashes based on the command line options passed. */
     13
     14#include <SDL.h>
     15#include <SDL_test.h>
     16
     17static SDLTest_CommonState *state;
     18static int exit_code;
     19static SDL_bool hang;
     20static SDL_bool crash;
     21
     22int
     23main(int argc, char** argv)
     24{
     25    int i, done;
     26    SDL_Event event;
     27
     28    state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO);
     29    if(!state)
     30        return 1;
     31
     32    state->window_flags |= SDL_WINDOW_RESIZABLE;
     33    
     34    exit_code = 0;
     35    hang = SDL_FALSE;
     36    crash = SDL_FALSE;
     37
     38    for(i = 1; i < argc; )
     39    {
     40        int consumed;
     41        consumed = SDLTest_CommonArg(state, i);
     42        if(consumed == 0)
     43        {
     44            consumed = -1;
     45            if(SDL_strcasecmp(argv[i], "--exit-code") == 0)
     46            {
     47                if(argv[i + 1])
     48                {
     49                    exit_code = SDL_atoi(argv[i + 1]);
     50                    consumed = 2;
     51                }
     52            }
     53            else if(SDL_strcasecmp(argv[i], "--hang") == 0)
     54            {
     55                hang = SDL_TRUE;
     56                consumed = 1;
     57            }
     58            else if(SDL_strcasecmp(argv[i], "--crash") == 0)
     59            {
     60                crash = SDL_TRUE;
     61                consumed = 1;
     62            }
     63        }
     64
     65        if(consumed < 0)
     66        {
     67            SDLTest_Log("Usage: %s %s [--exit-code N] [--crash] [--hang]", argv[0], SDLTest_CommonUsage(state));
     68            SDLTest_CommonQuit(state);
     69            return 1;
     70        }
     71        i += consumed;
     72    }
     73
     74    if(!SDLTest_CommonInit(state))
     75    {
     76        SDLTest_CommonQuit(state);
     77        return 1;
     78    }
     79
     80    /* infinite loop to hang the process */
     81    while(hang)
     82        SDL_Delay(10);
     83
     84    /* dereference NULL pointer to crash process */
     85    if(crash)
     86    {
     87        int* p = NULL;
     88        *p = 5;
     89    }
     90
     91    /* event loop */
     92    done = 0;
     93    while(!done)
     94    {
     95        while(SDL_PollEvent(&event))
     96            SDLTest_CommonEvent(state, &event, &done);
     97        SDL_Delay(10);
     98    }
     99
    100    return exit_code;
    101}