8000 [stdlib] Floating-point random-number improvements by NevinBR · Pull Request #33455 · swiftlang/swift · GitHub
[go: up one dir, main page]

Skip to content

[stdlib] Floating-point random-number improvements #33455

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 36 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
ba8dfeb
Merge pull request #1 from apple/master
NevinBR May 9, 2020
0beabf1
Create FloatingPointRandom.swift
NevinBR May 9, 2020
0fe952c
FloatingPointRandom initial commit
NevinBR Jul 31, 2020
b1f53e7
Moved random methods out of FloatingPoint.swift
NevinBR Jul 31, 2020
b11c1d6
Moved `_significandMask` out of FloatingPointRandom.swift
NevinBR Jul 31, 2020
9c1627c
Moved `_significandMask` into FloatingPoint.swift
NevinBR Jul 31, 2020
272a529
Always emit helper functions into client
NevinBR Aug 3, 2020
447963a
Expanded introductory comment
NevinBR Aug 3, 2020
b0735e5
Minor edit to comments
NevinBR Aug 3, 2020
694c66b
Attributes on _significandMask
NevinBR Aug 3, 2020
c528d6b
Made _sectionBitCount transparent
NevinBR Aug 3, 2020
ca18c5b
Moved _significandMask out of FloatingPoint.swift
NevinBR Aug 3, 2020
ac65f01
Moved _significandMask into FloatingPointRandom.swift
NevinBR Aug 3, 2020
c448f86
Line breaks in comments
NevinBR Aug 3, 2020
3a26c3e
Updated comments
NevinBR Aug 4, 2020
3eea545
Minor changes
NevinBR Aug 4, 2020
5d2ad18
Invariants
NevinBR Aug 6, 2020
06c6820
Comments
NevinBR Aug 6, 2020
01c064e
More comments
NevinBR Aug 6, 2020
7ca0b81
Wording
NevinBR Aug 7, 2020
3d1d6d4
Removed some blank lines
NevinBR Aug 7, 2020
cacc18f
FloatingPointRandom tests
NevinBR Aug 10, 2020
14fca3b
Fixed typo in FloatingPointRandom tests
NevinBR Aug 11, 2020
6b8b38b
Gyb'd FloatingPointRandom tests
NevinBR Aug 11, 2020
c54f6b9
Added .gyb to test file
NevinBR Aug 11, 2020
9f33bd0
Renamed a variable in tests
NevinBR Aug 11, 2020
aeff868
Fixed quote marks
NevinBR Aug 11, 2020
658d266
Benchmarks for unit interval
NevinBR Aug 13, 2020
2c8f548
License text
NevinBR Aug 13, 2020
10c7e4d
Spaces in comment
NevinBR Aug 13, 2020
a5ca976
Empty line
NevinBR Aug 13, 2020
abf4ca3
Blank line
NevinBR Aug 13, 2020
4f760b2
Fixed typo in comment
NevinBR Aug 13, 2020
5ee775f
Separated benchmarks into new PR
NevinBR Aug 13, 2020
4b1e501
Minor cleanup
NevinBR Aug 13, 2020
ac8f64e
Updated comments on tests
NevinBR Aug 13, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Gyb'd FloatingPointRandom tests
  • Loading branch information
NevinBR authored Aug 11, 2020
commit 6b8b38ba90a22a23a2e5040e4fd57d3c6d97af45
139 changes: 22 additions & 117 deletions test/stdlib/FloatingPointRandom.swift
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// RUN: %target-run-stdlib-swift
// RUN: %target-run-simple-swiftgyb
// REQUIRES: executable_test

import StdlibUnittest
Expand Down Expand Up @@ -93,142 +93,47 @@ extension BinaryFloatingPoint where RawSignificand: FixedWidthInteger {
}


// Range contains random value

FloatingPointRandom.test("Float/random/rangeContains") {
for a in Float.testValues {
for b in Float.testValues where b >= a {
expectTrue(Float.isRandomInRange(a...b))
if b != a {
expectTrue(Float.isRandomInRange(a..<b))
}
}
}
}

FloatingPointRandom.test("Double/random/rangeContains") {
for a in Double.testValues {
for b in Double.testValues where b >= a {
expectTrue(Double.isRandomInRange(a...b))
if b != a {
expectTrue(Double.isRandomInRange(a..<b))
}
}
}
}
% for Self in [`Float`, `Double`, `Float80`]:

% if Self == `Float80`:
#if !os(Windows) && (arch(i386) || arch(x86_64))
% end

FloatingPointRandom.test("Float80/random/rangeContains") {
for a in Float80.testValues {
for b in Float80.testValues where b >= a {
expectTrue(Float80.isRandomInRange(a...b))
FloatingPointRandom.test("${Self}/random/rangeContains") {
for a in ${Self}.testValues {
for b in ${Self}.testValues where b >= a {
expectTrue(${Self}.isRandomInRange(a...b))
if b != a {
expectTrue(Float80.isRandomInRange(a..<b))
expectTrue(${Self}.isRandomInRange(a..<b))
}
}
}
}

#endif


// Infinite range

FloatingPointRandom.test("Float/random/infiniteRange") {
FloatingPointRandom.test("${Self}/random/infiniteRange") {
expectCrashLater()
_ = Float.random(in: 0 ..< .infinity)
_ = ${Self}.random(in: 0 ..< .infinity)
}

FloatingPointRandom.test("Double/random/infiniteRange") {
FloatingPointRandom.test("${Self}/random/emptyRange") {
expectCrashLater()
_ = Double.random(in: 0 ..< .infinity)
_ = ${Self}.random(in: 0..<0)
}

#if !os(Windows) && (arch(i386) || arch(x86_64))

FloatingPointRandom.test("Float80/random/infiniteRange") {
expectCrashLater()
_ = Float80.random(in: 0 ..< .infinity)
}

#endif


// Empty range

FloatingPointRandom.test("Float/random/emptyRange") {
expectCrashLater()
_ = Float.random(in: 0..<0)
FloatingPointRandom.test("${Self}/random/fullRange") {
expectTrue(${Self}.isFullRangeRandomFinite())
}

FloatingPointRandom.test("Double/random/emptyRange") {
expectCrashLater()
_ = Double.random(in: 0..<0)
FloatingPointRandom.test("${Self}/random/lowBit") {
expectTrue(${Self}.isRandomLowBitEverSet())
}

#if !os(Windows) && (arch(i386) || arch(x86_64))

FloatingPointRandom.test("Float80/random/emptyRange") {
expectCrashLater()
_ = Float80.random(in: 0..<0)
FloatingPointRandom.test("${Self}/random/smallRange") {
expectTrue(${Self}.isSmallRangeRandomUnbiased())
}

% if Self == `Float80`:
#endif
% end


// Full range

FloatingPointRandom.test("Float/random/fullRange") {
expectTrue(Float.isFullRangeRandomFinite())
}

FloatingPointRandom.test("Double/random/fullRange") {
expectTrue(Double.isFullRangeRandomFinite())
}

#if !os(Windows) && (arch(i386) || arch(x86_64))

FloatingPointRandom.test("Float80/random/fullRange") {
expectTrue(Float80.isFullRangeRandomFinite())
}

#endif


// Low bit

FloatingPointRandom.test("Float/random/lowBit") {
expectTrue(Float.isRandomLowBitEverSet())
}

FloatingPointRandom.test("Double/random/lowBit") {
expectTrue(Double.isRandomLowBitEverSet())
}

#if !os(Windows) && (arch(i386) || arch(x86_64))

FloatingPointRandom.test("Float80/random/lowBit") {
expectTrue(Float80.isRandomLowBitEverSet())
}

#endif


// Small range

FloatingPointRandom.test("Float/random/smallRange") {
expectTrue(Float.isSmallRangeRandomUnbiased())
}

FloatingPointRandom.test("Double/random/smallRange") {
expectTrue(Double.isSmallRangeRandomUnbiased())
}

#if !os(Windows) && (arch(i386) || arch(x86_64))

FloatingPointRandom.test("Float80/random/smallRange") {
expectTrue(Float80.isSmallRangeRandomUnbiased())
}

#endif
% end
0