|  | // Copyright (c) 2013, 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. | 
|  | // | 
|  | // @dart=2.19 | 
|  |  | 
|  | // Test reporting a compile-time error if case expressions are of type double, | 
|  | // prior to Dart 3.0 and patterns. | 
|  |  | 
|  | import "package:expect/expect.dart"; | 
|  |  | 
|  | void main() { | 
|  | Expect.equals("IV", caesarSays(4)); | 
|  | Expect.equals(null, caesarSays(2)); | 
|  | Expect.equals(null, archimedesSays(3.14)); | 
|  | } | 
|  |  | 
|  | /// Before null safety, it was an error if the cases in a switch were not of | 
|  | /// the same type, regardless of the value expression's type. Now it is only an | 
|  | /// error if the cases are not a subtype of the value's type. | 
|  | caesarSays(n) { | 
|  | switch (n) { | 
|  | case 1: | 
|  | return "I"; | 
|  | case 4: | 
|  | return "IV"; | 
|  | case "M": | 
|  | return 1000; | 
|  | } | 
|  | return null; | 
|  | } | 
|  |  | 
|  | archimedesSays(n) { | 
|  | switch (n) { | 
|  | case 3.14: | 
|  | //   ^^^^ | 
|  | // [analyzer] COMPILE_TIME_ERROR.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS | 
|  | // [cfe] Case expression '3.14' does not have a primitive operator '=='. | 
|  | return "Pi"; | 
|  | case 2.71828: | 
|  | //   ^^^^^^^ | 
|  | // [analyzer] COMPILE_TIME_ERROR.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS | 
|  | // [cfe] Case expression '2.71828' does not have a primitive operator '=='. | 
|  | return "Huh?"; | 
|  | } | 
|  | return null; | 
|  | } |