initial draft for contributing.md

This commit is contained in:
Simon Hafner
2015-06-14 20:57:21 -05:00
parent 2f68b0baf0
commit d4dd332c8d

101
contributing.md Normal file
View File

@@ -0,0 +1,101 @@
# The git stuff
[Guide by github, scroll down a bit](https://guides.github.com/activities/contributing-to-open-source/)
# Deprecation
Backward compatibility is important, so if you are renaming a proc or
a type, you can use
```nim
{.deprecated [oldName: new_name].}
```
Or you can simply use
```nim
proc oldProc() {.deprecated.}
```
to mark a symbol as deprecated. Works for procs/types/vars/consts,
etc.
[Deprecated pragma in the manual.](http://nim-lang.org/docs/manual.html#pragmas-deprecated-pragma)
# Writing tests
Not all the tests follow this scheme, feel free to change the ones
that don't. Always leave the code cleaner than you found it.
## Stdlib
If you change the stdlib (anything under `lib/`), put a test in the
file you changed. Add the tests under an `when isMainModule:`
condition so they only get executed when the tester is building the
file. Each test should be in a separate `block:` statement, such that
each has its own scope. Use boolean conditions and `assert` for the
testing by itself, don't rely on echo statements or similar.
Sample test:
```nim
when isMainModule:
block lenTest:
var values: HashSet[int]
assert(not values.isValid)
assert values.len == 0
assert values.card == 0
block setIterator:
type pair = tuple[a, b: int]
var a, b = initSet[pair]()
a.incl((2, 3))
a.incl((3, 2))
a.incl((2, 3))
for x, y in a.items:
b.incl((x - 2, y + 1))
assert a.len == b.card
assert a.len == 2
```
## Compiler
The tests for the compiler work differently, they are all located in
`tests/`. Each test has its own file, which is different from the
stdlib tests. At the beginning of every test is the expected side of
the test. Possible keys are:
- output: The expected output, most likely via `echo`
- exitcode: Exit code of the test (via `exit(number)`)
- errormsg: The expected error message
- file: The file the errormsg
- line: The line the errormsg was produced at
An example for a test:
```nim
discard """
errormsg: "type mismatch: got (PTest)"
"""
type
PTest = ref object
proc test(x: PTest, y: int) = nil
var buf: PTest
buf.test()
```
# Running tests
You can run the tests with
./koch tests
which will run a good subset of tests. Some tests may fail.
# Comparing tests
Because some tests fail in the current `devel` branch, not every fail
after your change is necessarily caused by your changes.
TODO