Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/test/e2e/evaluators/pythonFix.ts
13394 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { ITestingServicesAccessor } from '../../../src/platform/test/node/services';
7
import { extractCodeBlocks } from '../../../src/util/common/markdown';
8
import { isValidPythonFile } from '../../simulation/diagnosticProviders/python';
9
import { ScenarioEvaluator } from '../scenarioLoader';
10
11
async function pythonTestFnEvaluator(
12
accessor: ITestingServicesAccessor,
13
query: string,
14
response: string,
15
testFn: string
16
): Promise<{ success: boolean; errorMessage?: string }> {
17
const codeBlock = extractCodeBlocks(response).filter(x => x.language === 'python').at(0);
18
if (!codeBlock) {
19
return { success: false, errorMessage: 'No python code block found in response' };
20
}
21
22
const testCode = '\n' + codeBlock.code + '\n\n' + testFn + '\n\n' + 'test()';
23
24
const isValid = await isValidPythonFile(accessor, testCode);
25
return isValid ? { success: true } : { success: false, errorMessage: 'Unit test failed' };
26
}
27
28
const testFnSubArrayMinMaxSum = `
29
def test():
30
assert subarray_min_max_sum([1,2,3,4,5,6,7,8,9]) == (36,44)
31
assert subarray_min_max_sum([1,1,1]) == (2,2)
32
assert subarray_min_max_sum([-1,-1,-1]) == (-2,-2)
33
assert subarray_min_max_sum([-1,0,1]) == (-1,1)
34
assert subarray_min_max_sum([1]) == None
35
`;
36
37
const testFnPalindrome = `
38
def test():
39
assert palindrome('') == ''
40
assert palindrome('a') == 'a'
41
assert palindrome('aaaaaa') == 'aaaaaa'
42
assert palindrome('aaaaa') == 'aaaaa'
43
assert palindrome('abcddcba') == 'abcddcba'
44
assert palindrome('abcdcba') == 'abcdcba'
45
assert palindrome('xabcddcba') == 'abcddcba'
46
assert palindrome('axbcdcba') == 'abcdcba'
47
assert palindrome('abcxdcba') == 'abcdcba'
48
assert palindrome('abcdxcba') == 'abcxcba'
49
assert palindrome('abcdcxba') == 'abcdcba'
50
assert palindrome('abcdcbxa') == 'abcdcba'
51
assert palindrome('abcdcbax') == 'abcdcba'
52
assert palindrome('xabcdcbay') == None
53
assert palindrome('axbcdcbax') == None
54
`;
55
56
const PythonTestFnEvaluatorGenerator = (testFn: string): ScenarioEvaluator => {
57
return (accessor: ITestingServicesAccessor, question: string, answer: string) =>
58
pythonTestFnEvaluator(accessor, question, answer, testFn);
59
};
60
61
export const pythonFixEvaluators: { [key: string]: ScenarioEvaluator } = {
62
'case1.conversation.json': PythonTestFnEvaluatorGenerator(testFnSubArrayMinMaxSum),
63
'case2.conversation.json': PythonTestFnEvaluatorGenerator(testFnSubArrayMinMaxSum),
64
'case3.conversation.json': PythonTestFnEvaluatorGenerator(testFnSubArrayMinMaxSum),
65
'case4.conversation.json': PythonTestFnEvaluatorGenerator(testFnSubArrayMinMaxSum),
66
'case5.conversation.json': PythonTestFnEvaluatorGenerator(testFnSubArrayMinMaxSum),
67
'case6.conversation.json': PythonTestFnEvaluatorGenerator(testFnPalindrome),
68
'case7.conversation.json': PythonTestFnEvaluatorGenerator(testFnPalindrome),
69
'case8.conversation.json': PythonTestFnEvaluatorGenerator(testFnPalindrome),
70
'case9.conversation.json': PythonTestFnEvaluatorGenerator(testFnPalindrome),
71
'case10.conversation.json': PythonTestFnEvaluatorGenerator(testFnPalindrome),
72
'case11.conversation.json': PythonTestFnEvaluatorGenerator(testFnPalindrome),
73
'case12.conversation.json': PythonTestFnEvaluatorGenerator(testFnPalindrome),
74
};
75
76