// Copyright (c) 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_ASSIST_RANKER_NN_CLASSIFIER_TEST_UTIL_H_
#define COMPONENTS_ASSIST_RANKER_NN_CLASSIFIER_TEST_UTIL_H_

#include <vector>

#include "components/assist_ranker/proto/nn_classifier.pb.h"

namespace assist_ranker {
namespace nn_classifier {

// Creates a NNClassifierModel proto using a specified set of biases and
// weights.
NNClassifierModel CreateModel(
    const std::vector<float>& hidden_biases,
    const std::vector<std::vector<float>>& hidden_weights,
    const std::vector<float>& logits_biases,
    const std::vector<std::vector<float>>& logits_weights);

// Performs inference on the input vector using the specified model, and
// checks that the expected scores are output.
bool CheckInference(const NNClassifierModel& model,
                    const std::vector<float>& input,
                    const std::vector<float>& expected_scores);

// Creates a NNClassiferModel that implements eXclusive-OR. True results
// are > 1, false results are < -1. This is a simple classification problem
// that cannot be solved linearly, so is a good test for a neural network.
NNClassifierModel CreateXorClassifierModel();

}  // namespace nn_classifier
}  // namespace assist_ranker

#endif  // COMPONENTS_ASSIST_RANKER_NN_CLASSIFIER_TEST_UTIL_H_
