// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/*member: main:[null|powerset=1]*/
main() {
  zero();
  one();
  half();
  zeroPointZero();
  onePointZero();
  large();
  huge();
  minusOne();
  minusHalf();

  emptyString();
  nonEmptyString();
  stringJuxtaposition();
  stringConstantInterpolation();
  stringNonConstantInterpolation();

  symbolLiteral();
  typeLiteral();
}

////////////////////////////////////////////////////////////////////////////////
/// Return a zero integer literal.
////////////////////////////////////////////////////////////////////////////////

/*member: zero:[exact=JSUInt31|powerset=0]*/
zero() => 0;

////////////////////////////////////////////////////////////////////////////////
/// Return a positive integer literal.
////////////////////////////////////////////////////////////////////////////////

/*member: one:[exact=JSUInt31|powerset=0]*/
one() => 1;

////////////////////////////////////////////////////////////////////////////////
/// Return a double literal.
////////////////////////////////////////////////////////////////////////////////

/*member: half:[exact=JSNumNotInt|powerset=0]*/
half() => 0.5;

////////////////////////////////////////////////////////////////////////////////
/// Return an integer valued zero double literal.
////////////////////////////////////////////////////////////////////////////////

/*member: zeroPointZero:[exact=JSUInt31|powerset=0]*/
zeroPointZero() => 0.0;

////////////////////////////////////////////////////////////////////////////////
/// Return an integer valued double literal.
////////////////////////////////////////////////////////////////////////////////

/*member: onePointZero:[exact=JSUInt31|powerset=0]*/
onePointZero() => 1.0;

////////////////////////////////////////////////////////////////////////////////
/// Return a >31bit integer literal.
////////////////////////////////////////////////////////////////////////////////

/*member: large:[subclass=JSUInt32|powerset=0]*/
large() => 2147483648;

////////////////////////////////////////////////////////////////////////////////
/// Return a >32bit integer literal.
////////////////////////////////////////////////////////////////////////////////

/*member: huge:[subclass=JSPositiveInt|powerset=0]*/
huge() => 4294967296;

////////////////////////////////////////////////////////////////////////////////
/// Return a negative integer literal.
////////////////////////////////////////////////////////////////////////////////

/*member: minusOne:[subclass=JSInt|powerset=0]*/
minusOne() => -1;

////////////////////////////////////////////////////////////////////////////////
/// Return a negative double literal.
////////////////////////////////////////////////////////////////////////////////

/*member: minusHalf:[exact=JSNumNotInt|powerset=0]*/
minusHalf() => -0.5;

////////////////////////////////////////////////////////////////////////////////
/// Return an empty string.
////////////////////////////////////////////////////////////////////////////////

/*member: emptyString:Value([exact=JSString|powerset=0], value: "", powerset: 0)*/
emptyString() => '';

////////////////////////////////////////////////////////////////////////////////
/// Return a non-empty string.
////////////////////////////////////////////////////////////////////////////////

/*member: nonEmptyString:Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/
nonEmptyString() => 'foo';

////////////////////////////////////////////////////////////////////////////////
/// Return a string juxtaposition.
////////////////////////////////////////////////////////////////////////////////

/*member: stringJuxtaposition:Value([exact=JSString|powerset=0], value: "foobar", powerset: 0)*/
stringJuxtaposition() =>
    'foo'
    'bar';

////////////////////////////////////////////////////////////////////////////////
/// Return a string constant interpolation.
////////////////////////////////////////////////////////////////////////////////

/*member: stringConstantInterpolation:Value([exact=JSString|powerset=0], value: "foobar", powerset: 0)*/
stringConstantInterpolation() => 'foo${'bar'}';

////////////////////////////////////////////////////////////////////////////////
/// Return a string non-constant interpolation.
////////////////////////////////////////////////////////////////////////////////

/*member: _method1:[exact=JSBool|powerset=0]*/
_method1(/*[exact=JSBool|powerset=0]*/ c) => c;

/*member: stringNonConstantInterpolation:[exact=JSString|powerset=0]*/
stringNonConstantInterpolation() => 'foo${_method1(true)}${_method1(false)}';

////////////////////////////////////////////////////////////////////////////////
/// Return a symbol literal.
////////////////////////////////////////////////////////////////////////////////

/*member: symbolLiteral:[exact=Symbol|powerset=0]*/
symbolLiteral() => #main;

////////////////////////////////////////////////////////////////////////////////
/// Return a type literal.
////////////////////////////////////////////////////////////////////////////////

/*member: typeLiteral:[exact=_Type|powerset=0]*/
typeLiteral() => Object;
