Add files for hw0.
This commit is contained in:
commit
568d33253c
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
bin/
|
||||
build/
|
29
.gitlab-ci.yml
Normal file
29
.gitlab-ci.yml
Normal file
|
@ -0,0 +1,29 @@
|
|||
image: hwrunner:latest
|
||||
variables:
|
||||
GIT_SSL_NO_VERIFY: "true"
|
||||
EXEC: hi
|
||||
HW_DIR: hw0
|
||||
CPU_LIMIT: 10
|
||||
FILE_LIMIT: 1000000
|
||||
before_script:
|
||||
- make clean all -C ${HW_DIR}
|
||||
stages:
|
||||
- build
|
||||
- run
|
||||
- test
|
||||
build:
|
||||
stage: build
|
||||
script:
|
||||
- echo "Build done"
|
||||
run:
|
||||
stage: run
|
||||
script:
|
||||
- ulimit -t ${CPU_LIMIT}
|
||||
- ulimit -f ${FILE_LIMIT}
|
||||
- cd ${HW_DIR} && bin/${EXEC} -h
|
||||
test:
|
||||
stage: test
|
||||
script:
|
||||
- ulimit -t ${CPU_LIMIT}
|
||||
- ulimit -f ${FILE_LIMIT}
|
||||
- cd ${HW_DIR} && bin/${EXEC}_tests -S --verbose=0 --timeout 30
|
47
hw0/Makefile
Normal file
47
hw0/Makefile
Normal file
|
@ -0,0 +1,47 @@
|
|||
CC := gcc
|
||||
SRCD := src
|
||||
TSTD := tests
|
||||
BLDD := build
|
||||
BIND := bin
|
||||
INCD := include
|
||||
|
||||
ALL_SRCF := $(shell find $(SRCD) -type f -name *.c)
|
||||
ALL_OBJF := $(patsubst $(SRCD)/%,$(BLDD)/%,$(ALL_SRCF:.c=.o))
|
||||
FUNC_FILES := $(filter-out build/main.o, $(ALL_OBJF))
|
||||
TEST_SRC := $(shell find $(TSTD) -type f -name *.c)
|
||||
INC := -I $(INCD)
|
||||
|
||||
EXEC := hi
|
||||
TEST_EXEC := $(EXEC)_test
|
||||
|
||||
CFLAGS := -Wall -Werror
|
||||
DFLAGS := -g -DDEBUG
|
||||
STD := -std=gnu11
|
||||
TEST_LIB := -lcriterion
|
||||
|
||||
LIBS := -lreadline -pthread -ljansson
|
||||
|
||||
CFLAGS += $(STD)
|
||||
|
||||
.PHONY: clean all
|
||||
|
||||
debug: CFLAGS += -g -DDEBUG
|
||||
debug: all
|
||||
|
||||
all: setup $(EXEC) $(TEST_EXEC)
|
||||
|
||||
setup:
|
||||
mkdir -p bin build
|
||||
|
||||
$(EXEC): $(ALL_OBJF)
|
||||
$(CC) $^ -o $(BIND)/$@
|
||||
|
||||
|
||||
$(TEST_EXEC): $(ALL_OBJF)
|
||||
$(CC) $(CFLAGS) $(INC) $(FUNC_FILES) $(TEST_SRC) $(TEST_LIB) -o $(BIND)/$@
|
||||
|
||||
$(BLDD)/%.o: $(SRCD)/%.c
|
||||
$(CC) $(CFLAGS) $(INC) -c -o $@ $<
|
||||
|
||||
clean:
|
||||
$(RM) -r $(BLDD) $(BIND)
|
0
hw0/README.md
Normal file
0
hw0/README.md
Normal file
37
hw0/academic_honesty.txt
Normal file
37
hw0/academic_honesty.txt
Normal file
|
@ -0,0 +1,37 @@
|
|||
|
||||
ACADEMIC HONESTY STATEMENT
|
||||
================================================================================
|
||||
I certify the following:
|
||||
|
||||
1. All files hosted in this repository at any time, including any written
|
||||
material and code, are entirely of my own work. The only exception permitted to
|
||||
this rule is if the Professor(s) give explicit, written permission, in the
|
||||
assignment handout, on the webpage/PIAZZA, or in E-mail, to use or adapt other
|
||||
source code into my work. In this case, the origins of all such code is clearly
|
||||
cited in my files.
|
||||
|
||||
2. I have not shared, transmitted, or received source code written for this
|
||||
class (including in any semester) from anyone else except the Professor(s) and
|
||||
the TAs. This includes both electronic forms (E-mail or downloading), as well as
|
||||
written or printed source code.
|
||||
|
||||
3. Except in the case of explicit written permission given by the Professor(s),
|
||||
I have not included in my repository any source code obtained from a textbook,
|
||||
downloaded from the Internet, extracted from a software package or source code
|
||||
library, or from any other similar source.
|
||||
|
||||
I understand that the appearance of extremely similar code fragments in more
|
||||
than one homework submission will be treated as evidence that code has been
|
||||
shared and an academic dishonesty case will be filed against me.
|
||||
|
||||
I understand that code fragments can be extremely similar even if they are
|
||||
formatted differently and use different identifiers/labels/variables. The
|
||||
appearance of extremely similar code fragments that differ in this way will be
|
||||
regarded as evidence of an attempt to conceal that sharing has taken place.
|
||||
|
||||
When in doubt about whether or not I am permitted to use particular source
|
||||
materials, I will obtain written permission from the Professor(s), in advance of
|
||||
my submission. Such permission is best requested and obtained by E-mail to
|
||||
cse320@cs.stonybrook.edu
|
||||
================================================================================
|
||||
Signed:
|
46
hw0/hw0.sublime-project
Normal file
46
hw0/hw0.sublime-project
Normal file
|
@ -0,0 +1,46 @@
|
|||
{
|
||||
"folders":
|
||||
[
|
||||
{
|
||||
"path":".",
|
||||
"name":"Project Base"
|
||||
},
|
||||
{
|
||||
"path": "src",
|
||||
"name": "C Source",
|
||||
"follow_symlinks": false,
|
||||
"file_include_patterns":["*.c"],
|
||||
},
|
||||
{
|
||||
"path": "include",
|
||||
"name": "C Headers",
|
||||
"follow_symlinks": false,
|
||||
"file_include_patterns":["*.h"],
|
||||
},
|
||||
{
|
||||
"path": "tests",
|
||||
"name": "Tests",
|
||||
}
|
||||
],
|
||||
"settings":
|
||||
{
|
||||
},
|
||||
"build_systems":
|
||||
[
|
||||
{
|
||||
"name": "Release (full build)",
|
||||
"working_dir":"$project_path",
|
||||
"shell_cmd": "make clean all",
|
||||
},
|
||||
{
|
||||
"name": "Debug (full build)",
|
||||
"working_dir":"$project_path",
|
||||
"shell_cmd": "make clean debug",
|
||||
},
|
||||
{
|
||||
"name": "Test",
|
||||
"working_dir":"$project_path",
|
||||
"shell_cmd": "bin/${project_base_name}_tests}",
|
||||
}
|
||||
]
|
||||
}
|
14
hw0/include/hi.h
Normal file
14
hw0/include/hi.h
Normal file
|
@ -0,0 +1,14 @@
|
|||
#ifndef HI_H /* This is a preprocessor macro, it asks the preprocessor if HI_H \
|
||||
is NOT defined */
|
||||
#define HI_H /* Since it is not defined we define it */
|
||||
|
||||
/* We do this to prevent cyclical inclusion */
|
||||
|
||||
#include <stdio.h> /* This is a C library, this is equivalent to import in java */
|
||||
|
||||
char* say_hi(); /* This is a function prototype it defines the return type,
|
||||
name, and arguments */
|
||||
|
||||
#endif /* HI_H - This is just the end of the if statement */
|
||||
|
||||
/* Journey on over to `src/main.c` for the next comments. */
|
11
hw0/src/hi.c
Normal file
11
hw0/src/hi.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#include "hi.h" /* This is our headerfile */
|
||||
|
||||
/**
|
||||
* Here's the actual definition of our say_hi() function
|
||||
* as you can see it simply returns the string "Hi" Or does it??
|
||||
*/
|
||||
|
||||
char* say_hi(){
|
||||
return "Hello";
|
||||
}
|
||||
/* Back over to main to finish our program */
|
42
hw0/src/main.c
Normal file
42
hw0/src/main.c
Normal file
|
@ -0,0 +1,42 @@
|
|||
|
||||
#include "hi.h" /* This is our headerfile, containing the definition for say_hi() */
|
||||
/**
|
||||
* This is the full definition of a main function in C the beginning of our
|
||||
* program
|
||||
* it is the equivalent of public static void main in java
|
||||
*
|
||||
* In C main always returns an int, it represents the exit status of your
|
||||
* program
|
||||
* a program that runs successfully returns 0 one that has an error returns any
|
||||
* positive value
|
||||
*
|
||||
* The arguments passed to main are as follows:
|
||||
* - int argc: this is the size of the argv array
|
||||
* - char const *argv[] is an array of strings that are the command line
|
||||
* arguments for the program
|
||||
* - char const *envp[] are the environment variables availible to any program
|
||||
* run in the OS's environment
|
||||
* You can define main to have any of these arguments removed `int main()` for
|
||||
* example is entirely valid.
|
||||
*/
|
||||
|
||||
void* noop(void* v){return NULL;}
|
||||
|
||||
int main(int argc, char const *argv[], char const *envp[]) {
|
||||
/*
|
||||
* say_hi() is a function that returns a character pointer (a.k.a a string)
|
||||
* Journey on over to `src/hi.c` for the next comments.
|
||||
*/
|
||||
char *hello = say_hi();
|
||||
|
||||
/*
|
||||
* This is a print statement in C it places the arguments
|
||||
* following the format string into a string following the
|
||||
* format string's design.
|
||||
*/
|
||||
printf("%s, %s%c\n", hello, "World", '!');
|
||||
|
||||
/* End of our program */
|
||||
return 0;
|
||||
}
|
||||
/* Head over to tests/test.c to see what a unit test looks like */
|
16
hw0/tests/test.c
Normal file
16
hw0/tests/test.c
Normal file
|
@ -0,0 +1,16 @@
|
|||
#include <criterion/criterion.h>
|
||||
#include "hi.h"
|
||||
|
||||
/**
|
||||
* This is Criterion, an excellent testing framework for C.
|
||||
* It is also really well documented.
|
||||
* http://criterion.readthedocs.io/en/master/starter.html
|
||||
*/
|
||||
Test(CSE320_Suite, test_it_really_does_say_hi) {
|
||||
|
||||
cr_assert_str_not_empty(say_hi(),
|
||||
"say_hi() function returns empty string!");
|
||||
|
||||
cr_assert_str_eq(say_hi(), "Hi",
|
||||
"say_hi() function did not say 'Hi'");
|
||||
}
|
Loading…
Reference in New Issue
Block a user