Skip to content
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

Fix abstract relational comparison (<, >, <= and =>) #617

Merged
merged 8 commits into from
Aug 11, 2020

Conversation

HalidOdat
Copy link
Member

@HalidOdat HalidOdat commented Aug 9, 2020

This Pull Request fixes/closes #615 .

It changes the following:

  • Adds a spec complaint Value::abstract_relation() with TriState for the three possible states (true, false, and undefined)
  • Added Value::lt()
  • Added Value::le()
  • Added Value::gt()
  • Added Value::ge()
  • Added documentation
  • Removed Type::Date for value types, there is no type "date".
  • Added tests for relational operators
  • Added fast paths for common operations

@HalidOdat HalidOdat added bug Something isn't working execution Issues or PRs related to code execution labels Aug 9, 2020
@codecov
Copy link

codecov bot commented Aug 9, 2020

Codecov Report

Merging #617 into master will increase coverage by 1.05%.
The diff coverage is 96.74%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master     #617      +/-   ##
==========================================
+ Coverage   71.76%   72.81%   +1.05%     
==========================================
  Files         179      179              
  Lines       12663    13197     +534     
==========================================
+ Hits         9087     9609     +522     
- Misses       3576     3588      +12     
Impacted Files Coverage Δ
boa/src/builtins/property/mod.rs 41.74% <ø> (ø)
boa/src/builtins/value/mod.rs 66.42% <ø> (ø)
boa/src/builtins/number/mod.rs 61.77% <57.14%> (-0.24%) ⬇️
boa/src/builtins/value/type.rs 25.00% <75.00%> (ø)
boa/src/builtins/value/operations.rs 44.59% <85.07%> (+12.32%) ⬆️
boa/src/exec/operator/mod.rs 71.61% <92.85%> (+1.29%) ⬆️
boa/src/builtins/value/tests.rs 100.00% <100.00%> (ø)
boa/src/exec/mod.rs 71.11% <0.00%> (+0.31%) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 36ac8dc...1089122. Read the comment docs.

@HalidOdat HalidOdat added this to the v0.10.0 milestone Aug 9, 2020
@github-actions
Copy link

github-actions bot commented Aug 9, 2020

Benchmark for f0a218b

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 284.2±13.16ns 289.0±22.22ns -1.66%
Arithmetic operations (Full) 184.3±9.28µs 184.2±10.68µs +0.05%
Array access (Execution) 6.2±0.28µs 6.3±0.49µs -1.59%
Array access (Full) 193.0±11.10µs 197.8±13.25µs -2.43%
Array creation (Execution) 2.5±0.12ms 2.5±0.10ms 0.00%
Array creation (Full) 2.8±0.11ms 2.9±0.59ms -3.45%
Array pop (Execution) 903.7±45.27µs 875.4±32.43µs +3.23%
Array pop (Full) 1231.5±73.13µs 1202.4±80.57µs +2.42%
Boolean Object Access (Execution) 3.2±0.23µs 3.3±0.13µs -3.03%
Boolean Object Access (Full) 192.1±11.71µs 192.7±10.82µs -0.31%
Create Realm 347.0±12.97ns 350.8±24.91ns -1.08%
Dynamic Object Property Access (Execution) 3.7±0.17µs 3.7±0.21µs 0.00%
Dynamic Object Property Access (Full) 190.8±7.65µs 195.0±13.07µs -2.15%
Expression (Lexer) 1839.1±135.81ns 1785.0±69.36ns +3.03%
Expression (Parser) 4.0±0.18µs 4.1±0.31µs -2.44%
Fibonacci (Execution) 702.5±38.92µs 664.4±30.71µs +5.73%
Fibonacci (Full) 928.4±52.07µs 879.1±36.96µs +5.61%
For loop (Execution) 19.6±1.09µs 16.9±1.25µs +15.98%
For loop (Full) 208.3±10.80µs 210.3±13.26µs -0.95%
For loop (Lexer) 4.0±0.24µs 4.0±0.20µs 0.00%
For loop (Parser) 10.6±0.55µs 10.6±0.53µs 0.00%
Goal Symbols (Parser) 6.3±0.30µs 6.4±0.42µs -1.56%
Hello World (Lexer) 656.0±44.35ns 631.1±35.23ns +3.95%
Hello World (Parser) 1604.0±79.92ns 1639.9±124.80ns -2.19%
Long file (Parser) 4.8±0.17ms 4.8±0.16ms 0.00%
Number Object Access (Execution) 2.6±0.12µs 2.6±0.12µs 0.00%
Number Object Access (Full) 188.1±12.48µs 187.2±11.89µs +0.48%
Object Creation (Execution) 3.1±0.19µs 3.2±0.15µs -3.13%
Object Creation (Full) 228.4±14.85µs 224.6±10.01µs +1.69%
RegExp (Execution) 48.9±2.38µs 51.2±7.19µs -4.49%
RegExp (Full) 300.5±17.93µs 311.0±23.00µs -3.38%
RegExp Literal (Execution) 52.0±3.34µs 51.7±3.16µs +0.58%
RegExp Literal (Full) 244.0±10.50µs 246.3±10.99µs -0.93%
RegExp Literal Creation (Execution) 48.9±2.08µs 49.4±2.96µs -1.01%
RegExp Literal Creation (Full) 299.5±15.71µs 304.3±18.65µs -1.58%
Static Object Property Access (Execution) 3.3±0.20µs 3.4±0.17µs -2.94%
Static Object Property Access (Full) 190.6±11.52µs 190.2±11.32µs +0.21%
String Object Access (Execution) 4.9±0.31µs 4.9±0.21µs 0.00%
String Object Access (Full) 199.1±13.48µs 191.8±11.39µs +3.81%
String comparison (Execution) 4.4±0.30µs 4.5±0.32µs -2.22%
String comparison (Full) 189.6±14.50µs 195.6±10.63µs -3.07%
String concatenation (Execution) 3.8±0.45µs 3.5±0.19µs +8.57%
String concatenation (Full) 188.0±7.06µs 189.2±11.33µs -0.63%
String copy (Execution) 2.6±0.13µs 2.7±0.16µs -3.70%
String copy (Full) 189.6±11.58µs 184.2±8.38µs +2.93%
Symbols (Execution) 2.1±0.11µs 2.2±0.16µs -4.55%
Symbols (Full) 173.1±8.50µs 173.5±9.61µs -0.23%

@github-actions
Copy link

github-actions bot commented Aug 9, 2020

Benchmark for c81f264

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 288.0±14.80ns 289.0±15.20ns -0.35%
Arithmetic operations (Full) 183.7±7.80µs 192.8±12.58µs -4.72%
Array access (Execution) 6.3±0.38µs 6.3±0.30µs 0.00%
Array access (Full) 201.9±14.75µs 201.0±10.31µs +0.45%
Array creation (Execution) 2.7±0.15ms 2.6±0.11ms +3.85%
Array creation (Full) 2.9±0.12ms 2.9±0.17ms 0.00%
Array pop (Execution) 975.2±41.61µs 939.1±65.62µs +3.84%
Array pop (Full) 1251.3±64.42µs 1192.9±53.35µs +4.90%
Boolean Object Access (Execution) 3.3±0.29µs 3.3±0.24µs 0.00%
Boolean Object Access (Full) 198.1±15.32µs 193.4±9.09µs +2.43%
Create Realm 364.2±27.74ns 351.0±18.72ns +3.76%
Dynamic Object Property Access (Execution) 3.8±0.16µs 3.9±0.19µs -2.56%
Dynamic Object Property Access (Full) 196.4±9.77µs 221.7±14.53µs -11.41%
Expression (Lexer) 1858.8±118.46ns 1879.5±123.43ns -1.10%
Expression (Parser) 4.2±0.25µs 4.1±0.18µs +2.44%
Fibonacci (Execution) 709.7±56.15µs 686.6±36.04µs +3.36%
Fibonacci (Full) 930.8±54.84µs 908.1±64.23µs +2.50%
For loop (Execution) 19.5±0.99µs 16.9±0.80µs +15.38%
For loop (Full) 212.9±10.46µs 209.4±9.64µs +1.67%
For loop (Lexer) 4.1±0.18µs 4.1±0.17µs 0.00%
For loop (Parser) 10.9±0.58µs 10.7±0.43µs +1.87%
Goal Symbols (Parser) 6.6±0.44µs 6.6±0.29µs 0.00%
Hello World (Lexer) 629.5±25.48ns 653.3±43.55ns -3.64%
Hello World (Parser) 1627.6±89.14ns 1634.7±86.63ns -0.43%
Long file (Parser) 4.9±0.23ms 4.9±0.18ms 0.00%
Number Object Access (Execution) 2.6±0.14µs 2.6±0.12µs 0.00%
Number Object Access (Full) 190.4±8.91µs 191.5±9.19µs -0.57%
Object Creation (Execution) 3.2±0.23µs 3.2±0.17µs 0.00%
Object Creation (Full) 229.3±8.89µs 232.0±9.65µs -1.16%
RegExp (Execution) 50.9±2.64µs 50.1±2.20µs +1.60%
RegExp (Full) 307.5±22.08µs 328.0±16.56µs -6.25%
RegExp Literal (Execution) 58.0±5.02µs 52.5±2.50µs +10.48%
RegExp Literal (Full) 251.1±13.94µs 258.5±11.75µs -2.86%
RegExp Literal Creation (Execution) 50.5±2.88µs 50.9±3.10µs -0.79%
RegExp Literal Creation (Full) 307.1±18.39µs 345.3±14.18µs -11.06%
Static Object Property Access (Execution) 3.4±0.18µs 3.4±0.15µs 0.00%
Static Object Property Access (Full) 196.8±10.85µs 206.7±58.02µs -4.79%
String Object Access (Execution) 4.9±0.27µs 5.1±0.37µs -3.92%
String Object Access (Full) 196.2±11.87µs 195.1±7.89µs +0.56%
String comparison (Execution) 4.7±0.40µs 4.6±0.26µs +2.17%
String comparison (Full) 194.6±8.97µs 195.1±9.05µs -0.26%
String concatenation (Execution) 3.8±0.29µs 3.7±0.22µs +2.70%
String concatenation (Full) 191.1±9.79µs 189.5±9.51µs +0.84%
String copy (Execution) 2.7±0.16µs 2.7±0.12µs 0.00%
String copy (Full) 189.0±11.54µs 188.2±7.49µs +0.43%
Symbols (Execution) 2.2±0.16µs 2.2±0.10µs 0.00%
Symbols (Full) 187.3±12.82µs 178.2±9.96µs +5.11%

@github-actions
Copy link

Benchmark for b2196e4

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 315.7±0.22ns 314.1±0.27ns +0.51%
Arithmetic operations (Full) 205.2±0.67µs 202.3±0.26µs +1.43%
Array access (Execution) 6.9±0.04µs 6.8±0.01µs +1.47%
Array access (Full) 218.9±1.31µs 215.6±0.36µs +1.53%
Array creation (Execution) 2.9±0.00ms 2.8±0.00ms +3.57%
Array creation (Full) 3.2±0.00ms 3.1±0.00ms +3.23%
Array pop (Execution) 1068.2±2.46µs 1000.8±3.38µs +6.73%
Array pop (Full) 1363.4±1.86µs 1304.2±0.97µs +4.54%
Boolean Object Access (Execution) 3.5±0.01µs 3.6±0.01µs -2.78%
Boolean Object Access (Full) 211.9±0.26µs 212.6±0.22µs -0.33%
Create Realm 387.4±0.23ns 382.9±0.19ns +1.18%
Dynamic Object Property Access (Execution) 4.2±0.01µs 4.1±0.01µs +2.44%
Dynamic Object Property Access (Full) 211.6±0.39µs 211.7±0.32µs -0.05%
Expression (Lexer) 1988.4±1.71ns 2.0±0.00µs -0.58%
Expression (Parser) 4.5±0.01µs 4.5±0.00µs 0.00%
Fibonacci (Execution) 783.8±7.52µs 735.0±1.54µs +6.64%
Fibonacci (Full) 1021.7±1.83µs 979.9±0.76µs +4.27%
For loop (Execution) 21.1±0.08µs 18.5±0.03µs +14.05%
For loop (Full) 232.2±0.31µs 229.0±2.75µs +1.40%
For loop (Lexer) 4.5±0.00µs 4.5±0.02µs 0.00%
For loop (Parser) 12.5±0.01µs 12.5±0.01µs 0.00%
Goal Symbols (Parser) 7.4±0.01µs 7.4±0.01µs 0.00%
Hello World (Lexer) 697.3±0.86ns 703.8±1.97ns -0.92%
Hello World (Parser) 1854.7±1.69ns 1845.2±1.61ns +0.51%
Long file (Parser) 5.6±0.03ms 5.5±0.02ms +1.82%
Number Object Access (Execution) 2.8±0.01µs 2.8±0.00µs 0.00%
Number Object Access (Full) 210.6±0.24µs 209.3±0.24µs +0.62%
Object Creation (Execution) 3.4±0.01µs 3.5±0.01µs -2.86%
Object Creation (Full) 253.2±0.35µs 252.7±0.29µs +0.20%
RegExp (Execution) 54.9±0.49µs 54.5±0.57µs +0.73%
RegExp (Full) 337.1±0.47µs 334.9±0.38µs +0.66%
RegExp Literal (Execution) 57.8±0.80µs 57.1±0.61µs +1.23%
RegExp Literal (Full) 275.8±5.20µs 271.7±0.71µs +1.51%
RegExp Literal Creation (Execution) 55.1±0.61µs 54.4±0.50µs +1.29%
RegExp Literal Creation (Full) 338.4±3.21µs 334.6±0.61µs +1.14%
Static Object Property Access (Execution) 3.7±0.01µs 3.7±0.01µs 0.00%
Static Object Property Access (Full) 213.7±0.26µs 211.8±0.26µs +0.90%
String Object Access (Execution) 5.4±0.01µs 5.4±0.02µs 0.00%
String Object Access (Full) 212.1±0.27µs 214.7±0.30µs -1.21%
String comparison (Execution) 4.9±0.01µs 4.9±0.01µs 0.00%
String comparison (Full) 211.8±0.43µs 211.7±0.20µs +0.05%
String concatenation (Execution) 3.9±0.04µs 3.9±0.01µs 0.00%
String concatenation (Full) 208.2±0.76µs 208.2±0.58µs 0.00%
String copy (Execution) 2.9±0.01µs 2.9±0.00µs 0.00%
String copy (Full) 205.9±0.31µs 205.5±0.35µs +0.19%
Symbols (Execution) 2.3±0.00µs 2.4±0.00µs -4.17%
Symbols (Full) 193.7±0.39µs 193.1±0.40µs +0.31%

@HalidOdat HalidOdat marked this pull request as ready for review August 10, 2020 15:00
@HalidOdat HalidOdat changed the title Fix abstract relational comparison Fix abstract relational comparison (<, >, <= and =>) Aug 10, 2020
@github-actions
Copy link

Benchmark for 9ed20d1

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 365.7±19.96ns 327.2±17.98ns +11.77%
Arithmetic operations (Full) 236.5±14.03µs 241.7±11.45µs -2.15%
Array access (Execution) 8.1±0.40µs 7.9±0.49µs +2.53%
Array access (Full) 249.9±14.47µs 250.4±13.67µs -0.20%
Array creation (Execution) 2.9±0.13ms 2.9±0.13ms 0.00%
Array creation (Full) 3.3±0.13ms 3.3±0.15ms 0.00%
Array pop (Execution) 1043.5±65.09µs 1025.5±65.42µs +1.76%
Array pop (Full) 1438.3±76.66µs 1392.0±72.18µs +3.33%
Boolean Object Access (Execution) 4.5±0.24µs 4.1±0.23µs +9.76%
Boolean Object Access (Full) 248.8±14.80µs 244.1±17.50µs +1.93%
Create Realm 429.3±22.08ns 455.9±19.51ns -5.83%
Dynamic Object Property Access (Execution) 5.0±0.29µs 5.0±0.30µs 0.00%
Dynamic Object Property Access (Full) 255.2±17.47µs 247.7±16.14µs +3.03%
Expression (Lexer) 2.2±0.14µs 2.2±0.14µs 0.00%
Expression (Parser) 4.9±0.28µs 4.8±0.34µs +2.08%
Fibonacci (Execution) 901.3±40.43µs 935.3±73.33µs -3.64%
Fibonacci (Full) 1187.6±78.30µs 1168.3±56.85µs +1.65%
For loop (Execution) 21.4±1.38µs 21.6±1.04µs -0.93%
For loop (Full) 273.6±24.49µs 265.3±20.38µs +3.13%
For loop (Lexer) 5.0±0.34µs 4.8±0.23µs +4.17%
For loop (Parser) 13.8±0.95µs 13.1±0.93µs +5.34%
Goal Symbols (Parser) 8.0±0.65µs 7.9±0.46µs +1.27%
Hello World (Lexer) 780.8±45.94ns 780.9±50.49ns -0.01%
Hello World (Parser) 1952.6±118.85ns 1969.6±101.22ns -0.86%
Long file (Parser) 6.1±0.19ms 6.0±0.30ms +1.67%
Number Object Access (Execution) 3.2±0.16µs 3.3±0.18µs -3.03%
Number Object Access (Full) 245.3±15.43µs 245.7±15.49µs -0.16%
Object Creation (Execution) 4.3±0.28µs 4.2±0.29µs +2.38%
Object Creation (Full) 293.3±19.72µs 284.2±14.49µs +3.20%
RegExp (Execution) 65.1±4.80µs 64.4±4.56µs +1.09%
RegExp (Full) 390.3±24.06µs 388.6±24.68µs +0.44%
RegExp Literal (Execution) 68.9±3.90µs 67.8±3.87µs +1.62%
RegExp Literal (Full) 326.9±13.88µs 324.9±15.36µs +0.62%
RegExp Literal Creation (Execution) 65.2±3.64µs 65.7±5.74µs -0.76%
RegExp Literal Creation (Full) 385.2±22.94µs 385.7±20.82µs -0.13%
Static Object Property Access (Execution) 4.4±0.27µs 4.7±0.26µs -6.38%
Static Object Property Access (Full) 250.6±15.38µs 248.6±12.54µs +0.80%
String Object Access (Execution) 7.2±0.58µs 6.2±0.43µs +16.13%
String Object Access (Full) 248.4±13.84µs 244.9±12.90µs +1.43%
String comparison (Execution) 5.7±0.46µs 5.9±0.38µs -3.39%
String comparison (Full) 260.5±13.45µs 248.4±13.06µs +4.87%
String concatenation (Execution) 4.9±0.46µs 4.8±0.28µs +2.08%
String concatenation (Full) 252.0±14.00µs 246.7±15.32µs +2.15%
String copy (Execution) 3.5±0.21µs 3.6±0.25µs -2.78%
String copy (Full) 245.2±13.87µs 236.5±11.93µs +3.68%
Symbols (Execution) 2.9±0.20µs 3.0±0.15µs -3.33%
Symbols (Full) 239.3±13.65µs 227.5±16.84µs +5.19%

Copy link
Member

@Razican Razican left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me :) thanks!

@HalidOdat HalidOdat merged commit 607a534 into master Aug 11, 2020
@HalidOdat HalidOdat deleted the fix/abstract-relational-comparison branch August 11, 2020 13:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working execution Issues or PRs related to code execution
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Fix abstract relational comparison operators (<, <=, > and >=)
2 participants