// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`enum.js 1`] = `
====================================options=====================================
parsers: ["flow"]
printWidth: 80
                                                                                | printWidth
=====================================input======================================
var APIKeys = {
    AGE: 'age',
    NAME: 'name',
};

module.exports = APIKeys;

=====================================output=====================================
var APIKeys = {
  AGE: "age",
  NAME: "name"
};

module.exports = APIKeys;

================================================================================
`;

exports[`enum_client.js 1`] = `
====================================options=====================================
parsers: ["flow"]
printWidth: 80
                                                                                | printWidth
=====================================input======================================
var APIKeys = require('./enum');
// object that maps "AGE" to "age", "NAME" to "name"

function foo(x: $Keys<typeof APIKeys>) { }
foo("AGE");
foo("LOCATION"); // error

function bar(x: $Keys<{age: number}>) { }
bar(APIKeys.AGE); // not an error: APIKeys.AGE = "age"
bar(APIKeys.NAME); // error: since "NAME" is not in the smaller enum

var object = {};
object[APIKeys.AGE] = 123; // i.e., object.age = 123
object[APIKeys.NAME] = "FOO"; // i.e., object.name = "FOO"

var age:number = object[APIKeys.AGE];
var name:number = object[APIKeys.NAME]; // error: object.name is a string

var indices = { red: 0, green: 1, blue: 2 };
var tuple = [42, "hello", false];
var red:string = tuple[indices.red]; // error: tuple[0] is a number

=====================================output=====================================
var APIKeys = require("./enum");
// object that maps "AGE" to "age", "NAME" to "name"

function foo(x: $Keys<typeof APIKeys>) {}
foo("AGE");
foo("LOCATION"); // error

function bar(x: $Keys<{ age: number }>) {}
bar(APIKeys.AGE); // not an error: APIKeys.AGE = "age"
bar(APIKeys.NAME); // error: since "NAME" is not in the smaller enum

var object = {};
object[APIKeys.AGE] = 123; // i.e., object.age = 123
object[APIKeys.NAME] = "FOO"; // i.e., object.name = "FOO"

var age: number = object[APIKeys.AGE];
var name: number = object[APIKeys.NAME]; // error: object.name is a string

var indices = { red: 0, green: 1, blue: 2 };
var tuple = [42, "hello", false];
var red: string = tuple[indices.red]; // error: tuple[0] is a number

================================================================================
`;

exports[`number.js 1`] = `
====================================options=====================================
parsers: ["flow"]
printWidth: 80
                                                                                | printWidth
=====================================input======================================
function test1(x: number): number {
  return -x;
}

function test2(x: string): number {
  return -x;
}

// sanity checks to make sure merging envs doesn't keep creating new NumT's
// because of the UnaryMinusT's, causing nontermination
function test3(x: number, flip_times: number): number {
  for (var i = 0; i < flip_times; i++) {
    x = -x;
  }
  return x;
}
function test4(flip_times: number): number {
  var x = 1;
  for (var i = 0; i < flip_times; i++) {
    x = -x;
  }
  return x;
}

=====================================output=====================================
function test1(x: number): number {
  return -x;
}

function test2(x: string): number {
  return -x;
}

// sanity checks to make sure merging envs doesn't keep creating new NumT's
// because of the UnaryMinusT's, causing nontermination
function test3(x: number, flip_times: number): number {
  for (var i = 0; i < flip_times; i++) {
    x = -x;
  }
  return x;
}
function test4(flip_times: number): number {
  var x = 1;
  for (var i = 0; i < flip_times; i++) {
    x = -x;
  }
  return x;
}

================================================================================
`;
