blob: d0939c325a2936ed08372789a159aa88bd17bbc5 [file] [log] [blame] [view]
Marcel van Lohuizen0117d902019-02-21 23:55:39 +01001[TOC](Readme.md) [Prev](ranges.md) [Next](regexp.md)
Marcel van Lohuizen75cb0032019-01-11 12:10:48 +01002
Marcel van Lohuizen3e592b42019-01-11 20:31:29 +01003_Types ~~and~~ are Values_
Marcel van Lohuizenaf0932f2019-01-11 13:03:56 +01004
Marcel van Lohuizen75cb0032019-01-11 12:10:48 +01005# Predefined Ranges
6
Marcel van Lohuizen3eb3a3c2019-01-11 12:39:52 +01007CUE numbers have arbitrary precision.
Marcel van Lohuizen75cb0032019-01-11 12:10:48 +01008Also there is no unsigned integer type.
9
10CUE defines the following predefined identifiers to restrict the ranges of
11integers to common values.
12
13```
Marcel van Lohuizen62b87272019-02-01 10:07:49 +010014uint >=0
15uint8 >=0 & <=255
16int8 >=-128 & <=127
17uint16 >=0 & <=65536
Marcel van Lohuizen2e361592019-02-18 23:17:10 +010018int16 >=-32_768 & <=32_767
Marcel van Lohuizen62b87272019-02-01 10:07:49 +010019rune >=0 & <=0x10FFFF
20uint32 >=0 & <=4_294_967_296
21int32 >=-2_147_483_648 & <=2_147_483_647
22uint64 >=0 & <=18_446_744_073_709_551_615
23int64 >=-9_223_372_036_854_775_808 & <=9_223_372_036_854_775_807
24int128 >=-170_141_183_460_469_231_731_687_303_715_884_105_728 &
25 <=170_141_183_460_469_231_731_687_303_715_884_105_727
26uint128 >=0 & <=340_282_366_920_938_463_463_374_607_431_768_211_455
Marcel van Lohuizen75cb0032019-01-11 12:10:48 +010027```
28
29<!-- CUE editor -->
Marcel van Lohuizenf0c94042019-02-22 22:46:37 +010030_range.cue:_
Marcel van Lohuizen75cb0032019-01-11 12:10:48 +010031```
32positive: uint
33byte: uint8
34word: int32
35
36{
37 a: positive & -1
38 b: byte & 128
39 c: word & 2_000_000_000
40}
41```
42
43<!-- result -->
Marcel van Lohuizenf0c94042019-02-22 22:46:37 +010044`$ cue eval -i range.cue`
Marcel van Lohuizen75cb0032019-01-11 12:10:48 +010045```
Marcel van Lohuizen00c373d2019-06-07 01:08:23 +020046a: _|_ /* -1 not within bound int & >=0 */
Marcel van Lohuizen75cb0032019-01-11 12:10:48 +010047b: 128
48c: 2000000000
49```