#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Check to see if the working set produces a good executable.

This test script is made for the noincremental-prune test. This makes sure
that, after pruning starts (>1 bad item is found), that the number of args sent
to the switch scripts is equals to the actual number of items (i.e. checking
that noincremental always holds).
"""

from __future__ import print_function

import os
import sys

from binary_search_tool.test import common


def Main():
  working_set = common.ReadWorkingSet()

  with open('noinc_prune_good', 'r', encoding='utf-8') as good_args:
    num_good_args = len(good_args.readlines())

  with open('noinc_prune_bad', 'r', encoding='utf-8') as bad_args:
    num_bad_args = len(bad_args.readlines())

  num_args = num_good_args + num_bad_args
  if num_args != len(working_set):
    print('Only %d args, expected %d' % (num_args, len(working_set)))
    print('%d good args, %d bad args' % (num_good_args, num_bad_args))
    return 3

  os.remove('noinc_prune_bad')
  os.remove('noinc_prune_good')

  if not os.path.exists('./is_setup'):
    return 1
  for w in working_set:
    if w == 1:
      return 1  ## False, linking failure
  return 0


if __name__ == '__main__':
  retval = Main()
  sys.exit(retval)
