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
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"python.linting.enabled": true
}
3 changes: 3 additions & 0 deletions unicode/editor/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
('Python', 'Python'),
('Clojure', 'Clojure')
}

# Create your models here.

class UserSubmission(models.Model):
submitter = models.ForeignKey(User, on_delete=models.CASCADE)
problem = models.ForeignKey(Problem, on_delete=models.CASCADE)
Expand All @@ -23,3 +25,4 @@ class UserSubmission(models.Model):

def __str__(self):
return f'{self.submitter} - {self.problem} - {self.language} - ({self.created})'

40 changes: 39 additions & 1 deletion unicode/editor/tests.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,41 @@
import unittest

from datetime import datetime
from django.apps import apps
from django.test import TestCase
from editor.apps import EditorConfig
from editor.models import UserSubmission

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(EditorConfig.name, 'editor')
self.assertEqual(apps.get_app_config('editor').name, 'editor')

# models.py test
class UserSubmissionModelTest(TestCase):
#def test_submitter(self):


#def test_problem(self):

#Testing __str__(self) for the correct string return
'''
def test_string_representation(self):
test_submission = UserSubmission(submitter = "This is my First Submission")
test_problem = UserSubmission(problem = "This is my First Problem")
test_language = UserSubmission(language = "Python")
test_created = UserSubmission(created = "11/6/2019 12:30")
test_return = test_submission + " - " + test_problem + " - " + test_language + " - " + test_created
self.assertEqual(str(test_return), UserSubmission.__str__(self))
'''
#def test_created(self):


#def test_modified(self):

'''
class UrlsTest(TestCase):

# Create your tests here.
class ViewsTest(TestCase):
'''
179 changes: 120 additions & 59 deletions unicode/eval_engine/services.py
Original file line number Diff line number Diff line change
@@ -1,60 +1,121 @@
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1
=======
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1

return result
5 changes: 0 additions & 5 deletions unicode/eval_engine/settings.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@


# v3 API endpoints of HackerEarth Code Checker API
COMPILE_API_ENDPOINT = 'https://api.hackerearth.com/v3/code/compile/'
RUN_API_ENDPOINT = 'https://api.hackerearth.com/v3/code/run/'
Expand All @@ -15,6 +13,3 @@

# please keep this secret
CLIENT_SECRET = ''



17 changes: 16 additions & 1 deletion unicode/eval_engine/tests.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
import unittest

from django.apps import apps
from django.test import TestCase
from eval_engine.apps import EvalEngineConfig

# Create your tests here.
# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(EvalEngineConfig.name, 'eval_engine')
self.assertEqual(apps.get_app_config('eval_engine').name, 'eval_engine')
'''
# models.py test
class ModelsTest(TestCase):

# views.py test
class ViewsTest(TestCase):
'''
17 changes: 16 additions & 1 deletion unicode/global/tests.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
import unittest

from django.apps import apps
from django.test import TestCase
from apps import GlobalConfig

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(GlobalConfig.name, 'global')
self.assertEqual(apps.get_app_config('global').name, 'global')
'''
# models.py test
class ModelsTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
10 changes: 5 additions & 5 deletions unicode/problems/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ class Meta:
'example_solution' : forms.Textarea(attrs=ATTRS)
}

#class TestCaseForm(forms.ModelForm):
#
# class Meta:
# model = ProblemTestCase
# fields = ('test_input', 'test_output')
class ProblemTestCaseForm(forms.ModelForm):

class Meta:
model = ProblemTestCase
fields = ('test_input', 'test_output')
4 changes: 4 additions & 0 deletions unicode/problems/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,9 @@ class ProblemTestCase(models.Model):
test_input = models.CharField(max_length=1000)
test_output = models.CharField(max_length=1000)


def __str__(self):
return f'{self.problem} testcase {self.id}'



36 changes: 35 additions & 1 deletion unicode/problems/tests.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,37 @@
import unittest

from django.apps import apps
from django.test import TestCase
from problems.apps import ProblemsConfig
from problems.forms import ProblemForm, ProblemTestCaseForm
from problems.models import Problem, ProblemTestCase

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(ProblemsConfig.name, 'problems')
self.assertEqual(apps.get_app_config('problems').name, 'problems')

# forms.py test
'''
class ProblemFormTest(TestCase):

class ProblemTestCaseFormTest(TestCase):
'''

# models.py test
class ProblemModelTest(TestCase):

#Testing the models.CharField variables as strings
def test_title_string_representation(self):
test_title = Problem(title = "This is an Amazing Title!")
self.assertEqual(str(test_title), test_title.title)
'''
class ProblemTestCaseModelTest(TestCase):

# urls.py test
class UrlsTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
2 changes: 2 additions & 0 deletions unicode/users/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,5 @@ class Profile(models.Model):
school = models.CharField(max_length=50)
graduation_year = models.IntegerField()



23 changes: 22 additions & 1 deletion unicode/users/tests.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,24 @@
import unittest

from django.apps import apps
from django.test import TestCase
from users.apps import UsersConfig
from users.forms import UserRegistrationForm
from users.models import Profile

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(UsersConfig.name, 'users')
self.assertEqual(apps.get_app_config('users').name, 'users')

'''
# forms.py test
class UserRegistrationFormTest(TestCase):

# models.py test
class ProfileModelTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''