Exemplo n.º 1
0
Arquivo: reader.go Projeto: lanior/upc
func (self *ProblemArchiveReader) LoadTests(problem *model.Problem, inPattern, outPattern string) error {
	inRe, err := regexp.Compile(inPattern)
	if err != nil {
		return err
	}

	outRe, err := regexp.Compile(outPattern)
	if err != nil {
		return err
	}

	tests := make(map[string]int)
	getData := func(name, file string) (id int, data []byte, err error) {
		id, ok := tests[name]
		if !ok {
			problem.Tests = append(problem.Tests, model.Test{})
			id = len(problem.Tests) - 1
			tests[name] = id
		}

		data, err = self.ReadFile(file)
		return
	}

	for _, file := range self.FileList() {
		in := inRe.FindStringSubmatch(file)
		if in != nil {
			id, data, err := getData(in[1], file)
			if err != nil {
				return err
			}
			problem.Tests[id].Input = model.ConstTestData(data)
		}

		out := outRe.FindStringSubmatch(file)
		if out != nil {
			id, data, err := getData(out[1], file)
			if err != nil {
				return err
			}
			problem.Tests[id].Output = model.ConstSolutionData(data)
		}
	}
	return nil
}