예제 #1
0
파일: tests.go 프로젝트: lanior/upc
func (self Problem) GenerateTestsInput() error {
	for i, test := range self.Tests {
		if input, ok := test.Input.(*GeneratedInput); ok {
			generator, ok := self.Generators[input.Generator]
			if !ok {
				return fmt.Errorf("Test #%d: unknown generator %s", i, input.Generator)
			}

			compiler := programs.GetCompiler(generator.Language)
			if compiler == nil {
				return fmt.Errorf("Test #%d: unknown generator compiler %s", i, generator.Language)
			}

			program := programs.Program{
				Name:       "generator",
				Arguments:  strings.Split(input.Parameters, " "),
				Compiler:   compiler,
				OutputFile: "input.txt",

				Files: programs.FileList{
					"generator": generator.SourceCode,
				},
			}

			result, err := program.Run()
			if err != nil {
				return fmt.Errorf("Test #%d: generator run failed: %s", i, err)
			}
			self.Tests[i].Input = ConstTestData(result)
		}
	}
	return nil
}
예제 #2
0
파일: tests.go 프로젝트: lanior/upc
func (self Problem) GenerateTestsOutput() error {
	for i, test := range self.Tests {
		if output, ok := test.Output.(*SolutionOutput); ok {
			solution, ok := self.Solutions[output.Solution]
			if !ok {
				return fmt.Errorf("Test #%d: unknown solution %s", i, output.Solution)
			}

			compiler := programs.GetCompiler(solution.Language)
			if compiler == nil {
				return fmt.Errorf("Test #%d: unknown solution compiler %s", i, solution.Language)
			}

			program := programs.Program{
				Name:       "solution",
				Compiler:   compiler,
				OutputFile: "output.txt",

				Files: programs.FileList{
					"solution":  solution.SourceCode,
					"input.txt": test.Input.Generate(),
				},
			}

			result, err := program.Run()
			if err != nil {
				return fmt.Errorf("Test #%d: solution run failed: %s", i, err)
			}
			self.Tests[i].Output = ConstSolutionData(result)
		}
	}
	return nil
}