// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cpu_test

import (
	"errors"
	. "internal/cpu"
	"io/ioutil"
	"regexp"
	"testing"
)

func getFeatureList() ([]string, error) {
	cpuinfo, err := ioutil.ReadFile("/proc/cpuinfo")
	if err != nil {
		return nil, err
	}
	r := regexp.MustCompile("features\\s*:\\s*(.*)")
	b := r.FindSubmatch(cpuinfo)
	if len(b) < 2 {
		return nil, errors.New("no feature list in /proc/cpuinfo")
	}
	return regexp.MustCompile("\\s+").Split(string(b[1]), -1), nil
}

func TestS390XAgainstCPUInfo(t *testing.T) {
	// mapping of linux feature strings to S390X fields
	mapping := make(map[string]*bool)
	for _, option := range Options {
		mapping[option.Name] = option.Feature
	}

	// these must be true on the machines Go supports
	mandatory := make(map[string]bool)
	mandatory["zarch"] = false
	mandatory["eimm"] = false
	mandatory["ldisp"] = false
	mandatory["stfle"] = false

	features, err := getFeatureList()
	if err != nil {
		t.Error(err)
	}
	for _, feature := range features {
		if _, ok := mandatory[feature]; ok {
			mandatory[feature] = true
		}
		if flag, ok := mapping[feature]; ok {
			if !*flag {
				t.Errorf("feature '%v' not detected", feature)
			}
		} else {
			t.Logf("no entry for '%v'", feature)
		}
	}
	for k, v := range mandatory {
		if !v {
			t.Errorf("mandatory feature '%v' not detected", k)
		}
	}
}
