Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,6 @@ cmake-build-debug/
.vscode/

# Created validation_test files
validation_test/output.bpm
validation_test/**/output.bmp
validation_test/**/output.jpg
validation_test/**/difference.jpg
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ cmake .. && make && ./RayTracer scene.obj

## How to create a test
Create a directory in validation_test with the name of the scene (it must match the name of the scene).
Create test files inside the directory with the following name format: `<width>x<height>_<number_of_frame_to_render>_<difference_threshold>`
Create test files inside the directory with the following name format: `<number_of_frame_to_render>_<difference_threshold>.jpg`
Then, follow the next point in order to generate the test.

## How to regenerate tests
Expand Down
2 changes: 1 addition & 1 deletion src/Dispatcher/Dispatcher.cc
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ namespace rt {
_threads.clear();
}

std::vector<Color> Dispatcher::Flush() {
std::vector<Color> const& Dispatcher::Flush() const {
return _image;
}

Expand Down
2 changes: 1 addition & 1 deletion src/Dispatcher/Dispatcher.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ namespace rt {

void Start(void);
void Stop(void);
std::vector<Color> Flush(void);
std::vector<Color> const& Flush(void) const;
std::size_t GetNumberOfProcessed(void) const;

private:
Expand Down
Binary file added validation_test/Cube/100_100.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added validation_test/Dragon/100_300.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added validation_test/Ico/100_100.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 3 additions & 2 deletions validation_test/regenerate.sh
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
#!/usr/bin/env bash

cd ../cmake-build-debug && cmake .. && make && cd -
echo "Launching regeneration of validation tests"
for directory in $(ls -d */ | sed 's#/##')
do
for parameter in $(ls ${directory} -I output.jpg -I difference.jpg | sed -e 's/\..*$//')
do
echo "Launching regeneration on scene $directory with parameter ${parameter}"
../cmake-build-debug/RayTracer ../scenes/${directory}.obj $(echo ${parameter} | cut -d '_' -f1) --output-image $(echo ${parameter} | cut -d '_' -f2)
convert output.bpm ${directory}/${parameter}.jpg
../cmake-build-debug/RayTracer ../scenes/${directory}.dae --output-image=$(echo ${parameter} | cut -d '_' -f1)
convert -quality 100% output.bmp ${directory}/${parameter}.jpg
done
done
10 changes: 7 additions & 3 deletions validation_test/test.sh
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
#!/usr/bin/env bash

cd ../cmake-build-debug && cmake .. && make && cd -
echo "Launching validation tests"
status=0
for directory in $(ls -d */ | sed 's#/##')
do
for test in $(ls ${directory} -I output.jpg -I difference.jpg | sed -e 's/\..*$//')
do
echo
echo "Launching test on scene $directory with test $test"
../cmake-build-debug/RayTracer ../scenes/${directory}.obj $(echo ${test} | cut -d '_' -f1) --output-image $(echo ${test} | cut -d '_' -f2)
convert output.bpm ${directory}/output.jpg
../cmake-build-debug/RayTracer ../scenes/${directory}.dae --output-image=$(echo ${test} | cut -d '_' -f1)
convert -quality 100% output.bmp ${directory}/output.jpg
diff=$(compare -metric AE -fuzz 5% ${directory}/output.jpg ${directory}/${test}.jpg ${directory}/difference.jpg 2>&1)
if [[ ${diff} -ge $(echo ${test} | cut -d '_' -f3) ]]; then
if [[ ${diff} -ge $(echo ${test} | cut -d '_' -f2) ]]; then
echo "FAIL: Too many diff for $directory/${test}: $diff"
echo "Uploading difference..."
./upload.sh ${directory}/difference.jpg
status=1
else
echo "SUCCESS: Passed ${directory}/${test}: $diff"
Expand Down
118 changes: 118 additions & 0 deletions validation_test/upload.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
#!/bin/bash

# Imgur script by Bart Nagel <bart@tremby.net>
# Improvements by Tino Sino <robottinosino@gmail.com>
# Version 6 or more
# I release this into the public domain. Do with it what you will.
# The latest version can be found at https://github.com/tremby/imgur.sh

# API Key provided by Bart;
# replace with your own or specify yours as IMGUR_CLIENT_ID envionment variable
# to avoid limits
default_client_id=c9a6efb3d7932fd
client_id="${IMGUR_CLIENT_ID:=$default_client_id}"

# Function to output usage instructions
function usage {
echo "Usage: $(basename $0) [<filename|URL> [...]]" >&2
echo
echo "Upload images to imgur and output their new URLs to stdout. Each one's" >&2
echo "delete page is output to stderr between the view URLs." >&2
echo
echo "A filename can be - to read from stdin. If no filename is given, stdin is read." >&2
echo
echo "If xsel, xclip, or pbcopy is available, the URLs are put on the X selection for" >&2
echo "easy pasting." >&2
}

# Function to upload a path
# First argument should be a content spec understood by curl's -F option
function upload {
curl -s -H "Authorization: Client-ID $client_id" -H "Expect: " -F "image=$1" https://api.imgur.com/3/image.xml
# The "Expect: " header is to get around a problem when using this through
# the Squid proxy. Not sure if it's a Squid bug or what.
}

# Check arguments
if [ "$1" == "-h" -o "$1" == "--help" ]; then
usage
exit 0
elif [ $# -eq 0 ]; then
echo "No file specified; reading from stdin" >&2
exec "$0" -
fi

# Check curl is available
type curl &>/dev/null || {
echo "Couldn't find curl, which is required." >&2
exit 17
}

clip=""
errors=false

# Loop through arguments
while [ $# -gt 0 ]; do
file="$1"
shift

# Upload the image
if [[ "$file" =~ ^https?:// ]]; then
# URL -> imgur
response=$(upload "$file") 2>/dev/null
else
# File -> imgur
# Check file exists
if [ "$file" != "-" -a ! -f "$file" ]; then
echo "File '$file' doesn't exist; skipping" >&2
errors=true
continue
fi
response=$(upload "@$file") 2>/dev/null
fi

if [ $? -ne 0 ]; then
echo "Upload failed" >&2
errors=true
continue
elif echo "$response" | grep -q 'success="0"'; then
echo "Error message from imgur:" >&2
msg="${response##*<error>}"
echo "${msg%%</error>*}" >&2
errors=true
continue
fi

# Parse the response and output our stuff
url="${response##*<link>}"
url="${url%%</link>*}"
delete_hash="${response##*<deletehash>}"
delete_hash="${delete_hash%%</deletehash>*}"
echo $url | sed 's/^http:/https:/'
echo "Delete page: https://imgur.com/delete/$delete_hash" >&2

# Append the URL to a string so we can put them all on the clipboard later
clip+="$url"
if [ $# -gt 0 ]; then
clip+=$'\n'
fi
done

# Put the URLs on the clipboard if we can
if type pbcopy &>/dev/null; then
echo -n "$clip" | pbcopy
elif [ $DISPLAY ]; then
if type xsel &>/dev/null; then
echo -n "$clip" | xsel -i
elif type xclip &>/dev/null; then
echo -n "$clip" | xclip
else
echo "Haven't copied to the clipboard: no xsel or xclip" >&2
fi
else
echo "Haven't copied to the clipboard: no \$DISPLAY or pbcopy" >&2
fi

if $errors; then
exit 1
fi