-
Notifications
You must be signed in to change notification settings - Fork 94
/
Copy pathservice_yukicoder.py
130 lines (108 loc) · 7.14 KB
/
service_yukicoder.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# -*- coding: utf-8 -*-
import unittest
from onlinejudge.service.yukicoder import YukicoderProblem, YukicoderService
from onlinejudge.type import *
class YukicoderProblemTest(unittest.TestCase):
def test_from_url(self):
self.assertEqual(YukicoderProblem.from_url('https://yukicoder.me/problems/no/9003').problem_no, 9003)
self.assertEqual(YukicoderProblem.from_url('https://yukicoder.me/problems/100').problem_id, 100)
self.assertEqual(YukicoderProblem.from_url('http://yukicoder.me/problems/no/123/').problem_no, 123)
self.assertEqual(YukicoderProblem.from_url('http://yukicoder.me/problems/123').problem_id, 123)
def test_donwload_sample_cases(self):
self.assertEqual(YukicoderProblem.from_url('http://yukicoder.me/problems/no/9000').download_sample_cases(), [
TestCase(name='sample-1', input_name='サンプル1 入力', input_data=b'yukicoder\n', output_name='サンプル1 出力', output_data=b'Hello World!\n'),
])
self.assertEqual(YukicoderProblem.from_url('https://yukicoder.me/problems/no/400').download_sample_cases(), [
TestCase(name='sample-1', input_name='サンプル1 入力', input_data=b'<<<\n', output_name='サンプル1 出力', output_data=b'>>>\n'),
TestCase(name='sample-2', input_name='サンプル2 入力', input_data=b'<>>\n', output_name='サンプル2 出力', output_data=b'<<>\n'),
TestCase(name='sample-3', input_name='サンプル3 入力', input_data=b'>>><<<\n', output_name='サンプル3 出力', output_data=b'>>><<<\n'),
TestCase(name='sample-4', input_name='サンプル4 入力', input_data=b'><<><<<><><\n', output_name='サンプル4 出力', output_data=b'><><>>><>><\n'),
])
self.assertEqual(YukicoderProblem.from_url('https://yukicoder.me/problems/no/260').download_sample_cases(), [
TestCase(name='sample-1', input_name='サンプル1 入力', input_data=b'1 100\n', output_name='サンプル1 出力', output_data=b'40\n'),
TestCase(name='sample-2', input_name='サンプル2 入力', input_data=b'114 514\n', output_name='サンプル2 出力', output_data=b'211\n'),
TestCase(name='sample-3', input_name='サンプル3 入力', input_data=b'1234 567890\n', output_name='サンプル3 出力', output_data=b'339733\n'),
])
self.assertEqual(YukicoderProblem.from_url('https://yukicoder.me/problems/no/104').download_sample_cases(), [
TestCase(name='sample-1', input_name='サンプル1 入力', input_data=b'LR\n', output_name='サンプル1 出力', output_data=b'5\n'),
TestCase(name='sample-2', input_name='サンプル2 入力', input_data=b'RLL\n', output_name='サンプル2 出力', output_data=b'12\n'),
TestCase(name='sample-3', input_name='サンプル3 入力', input_data=b'RLLRLRLRRRLRL\n', output_name='サンプル3 出力', output_data=b'12986\n'),
TestCase(name='sample-4', input_name='サンプル4 入力', input_data=b'\n', output_name='サンプル4 出力', output_data=b'1\n'),
])
@unittest.expectedFailure
def test_donwload_sample_cases_issue_355(self):
# see https://github.com/kmyk/online-judge-tools/issues/355
self.assertEqual(YukicoderProblem.from_url('https://yukicoder.me/problems/no/649').download_sample_cases(), [
TestCase(name='sample-1', input_name='サンプル1 入力', input_data=b'15 3\n1 3\n1 4\n1 5\n2\n2\n1 10\n1 10\n1 1\n2\n1 3\n2\n1 1000\n2\n1 0\n2\n', output_name='サンプル1 出力', output_data=b'5\n-1\n4\n3\n10\n3\n'),
TestCase(name='sample-2', input_name='サンプル2 入力', input_data=b'4 1\n1 10\n1 10\n2\n2\n', output_name='サンプル2 出力', output_data=b'10\n10\n'),
TestCase(name='sample-3', input_name='サンプル3 入力', input_data=b'4 2\n1 9\n1 10000000000000000\n1 90000000000000000\n2\n', output_name='サンプル3 出力', output_data=b'10000000000000000\n'),
TestCase(name='sample-4', input_name='サンプル4 入力', input_data=b'1 1\n2\n', output_name='サンプル4 出力', output_data=b'-1\n'),
])
class YukicoderOfficialAPITest(unittest.TestCase):
def test_get_user_10(self):
data = YukicoderService().get_user(id=10)
self.assertIn('Id', data)
self.assertIn('Name', data)
self.assertIn('Solved', data)
self.assertIn('Level', data)
self.assertIn('Rank', data)
self.assertIn('Score', data)
self.assertIn('Points', data)
self.assertEqual(data['Id'], 10)
self.assertEqual(data['Name'], 'yuki2006')
def test_get_user_yuki2006(self):
data = YukicoderService().get_user(name='yuki2006')
self.assertEqual(data['Id'], 10)
self.assertEqual(data['Name'], 'yuki2006')
def test_get_user_0(self):
data = YukicoderService().get_user(id=0)
self.assertIs(data, None)
def test_get_solved_10(self):
data = YukicoderService().get_solved(id=10)
self.assertGreater(len(data), 200)
self.assertIn('No', data[0])
self.assertIn('ProblemId', data[0])
self.assertIn('Title', data[0])
self.assertIn('AuthorId', data[0])
self.assertIn('TesterId', data[0])
self.assertIn('Level', data[0])
self.assertIn('ProblemType', data[0])
self.assertIn('Tags', data[0])
def test_get_solved_yuki2006(self):
data = YukicoderService().get_solved(name='yuki2006')
self.assertGreater(len(data), 200)
def test_get_solved_0(self):
data = YukicoderService().get_solved(id=0)
self.assertIs(data, None)
def test_get_user_favorite_10(self):
data = YukicoderService().get_user_favorite(id=10)
it = list(filter(lambda row: row['#'] == 10000, data))
self.assertEqual(len(it), 1)
it = it[0]
self.assertEqual(it['問題'], 'No.9000 Hello World! (テスト用)')
self.assertEqual(it['結果'], 'AC')
self.assertEqual(it['言語'], 'C++11')
def test_get_user_favorite_problem_10(self):
data = YukicoderService().get_user_favorite_problem(id=10)
it = list(filter(lambda row: row['ナンバー'] == 111, data))
self.assertEqual(len(it), 1)
it = it[0]
self.assertEqual(it['問題名'], 'あばばばば')
self.assertEqual(it['レベル'], '1.5')
def test_get_user_favorite_wiki_10(self):
data = YukicoderService().get_user_favorite_wiki(id=10)
it = list(filter(lambda row: row['Wikiページ'] == 'decomposable_searching_problem', data))
self.assertEqual(len(it), 1)
def test_get_submissions(self):
data = YukicoderService().get_submissions(page=3, status='TLE')
self.assertEqual(len(data), 50)
self.assertEqual(data[4]['結果'], 'TLE')
def test_get_problems(self):
data = YukicoderService().get_problems(page=2, sort='no_asc')
self.assertEqual(len(data), 50)
self.assertEqual(data[3]['ナンバー'], 54)
self.assertEqual(data[3]['問題名'], "Happy Hallowe'en")
self.assertEqual(data[3]['レベル'], '4')
self.assertEqual(data[3]['作問者/url'], '/users/4')
if __name__ == '__main__':
unittest.main()