@@ -423,8 +423,10 @@ pub fn detect_features() -> usize {
423423
424424#[ cfg( test) ]
425425mod tests {
426+ extern crate cupid;
427+
426428 #[ test]
427- fn runtime_detection_x86_nocapture ( ) {
429+ fn dump ( ) {
428430 println ! ( "sse: {:?}" , cfg_feature_enabled!( "sse" ) ) ;
429431 println ! ( "sse2: {:?}" , cfg_feature_enabled!( "sse2" ) ) ;
430432 println ! ( "sse3: {:?}" , cfg_feature_enabled!( "sse3" ) ) ;
@@ -440,10 +442,10 @@ mod tests {
440442 println ! ( "avx512bw {:?}" , cfg_feature_enabled!( "avx512bw" ) ) ;
441443 println ! ( "avx512dq {:?}" , cfg_feature_enabled!( "avx512dq" ) ) ;
442444 println ! ( "avx512vl {:?}" , cfg_feature_enabled!( "avx512vl" ) ) ;
443- println ! ( "avx512ifma {:?}" , cfg_feature_enabled!( "avx512ifma" ) ) ;
444- println ! ( "avx512vbmi {:?}" , cfg_feature_enabled!( "avx512vbmi" ) ) ;
445+ println ! ( "avx512_ifma {:?}" , cfg_feature_enabled!( "avx512ifma" ) ) ;
446+ println ! ( "avx512_vbmi {:?}" , cfg_feature_enabled!( "avx512vbmi" ) ) ;
445447 println ! (
446- "avx512vpopcntdq {:?}" ,
448+ "avx512_vpopcntdq {:?}" ,
447449 cfg_feature_enabled!( "avx512vpopcntdq" )
448450 ) ;
449451 println ! ( "fma: {:?}" , cfg_feature_enabled!( "fma" ) ) ;
@@ -458,4 +460,55 @@ mod tests {
458460 println ! ( "xsaves {:?}" , cfg_feature_enabled!( "xsaves" ) ) ;
459461 println ! ( "xsavec {:?}" , cfg_feature_enabled!( "xsavec" ) ) ;
460462 }
463+
464+ #[ test]
465+ fn compare_with_cupid ( ) {
466+ let information = cupid:: master ( ) . unwrap ( ) ;
467+ assert_eq ! ( cfg_feature_enabled!( "sse" ) , information. sse( ) ) ;
468+ assert_eq ! ( cfg_feature_enabled!( "sse2" ) , information. sse2( ) ) ;
469+ assert_eq ! ( cfg_feature_enabled!( "sse3" ) , information. sse3( ) ) ;
470+ assert_eq ! ( cfg_feature_enabled!( "ssse3" ) , information. ssse3( ) ) ;
471+ assert_eq ! ( cfg_feature_enabled!( "sse4.1" ) , information. sse4_1( ) ) ;
472+ assert_eq ! ( cfg_feature_enabled!( "sse4.2" ) , information. sse4_2( ) ) ;
473+ assert_eq ! ( cfg_feature_enabled!( "avx" ) , information. avx( ) ) ;
474+ assert_eq ! ( cfg_feature_enabled!( "avx2" ) , information. avx2( ) ) ;
475+ // assert_eq!(cfg_feature_enabled!("avx512f"), information.avx512f());
476+ // assert_eq!(cfg_feature_enabled!("avx512cd"),
477+ // information.avx512cd());
478+ // assert_eq!(cfg_feature_enabled!("avx512er"),
479+ // information.avx512er());
480+ // assert_eq!(cfg_feature_enabled!("avx512pf"),
481+ // information.avx512pf());
482+ // assert_eq!(cfg_feature_enabled!("avx512bw"),
483+ // information.avx512bw());
484+ // assert_eq!(cfg_feature_enabled!("avx512dq"),
485+ // information.avx512dq());
486+ // assert_eq!(cfg_feature_enabled!("avx512vl"),
487+ // information.avx512vl());
488+ // assert_eq!(cfg_feature_enabled!("avx512ifma"),
489+ // information.avx512_ifma());
490+ // assert_eq!(cfg_feature_enabled!("avx512vbmi"),
491+ // information.avx512_vbmi());
492+ // assert_eq!(cfg_feature_enabled!("avx512vpopcntdq"),
493+ // information.avx512_vpopcntdq());
494+ assert_eq ! ( cfg_feature_enabled!( "fma" ) , information. fma( ) ) ;
495+ assert_eq ! ( cfg_feature_enabled!( "bmi" ) , information. bmi1( ) ) ;
496+ assert_eq ! ( cfg_feature_enabled!( "bmi2" ) , information. bmi2( ) ) ;
497+ assert_eq ! ( cfg_feature_enabled!( "popcnt" ) , information. popcnt( ) ) ;
498+ // assert_eq!(cfg_feature_enabled!("sse4a"), information.sse4a());
499+ assert_eq ! ( cfg_feature_enabled!( "abm" ) , information. lzcnt( ) ) ;
500+ assert_eq ! ( cfg_feature_enabled!( "tbm" ) , information. tbm( ) ) ;
501+ assert_eq ! ( cfg_feature_enabled!( "lzcnt" ) , information. lzcnt( ) ) ;
502+ assert_eq ! ( cfg_feature_enabled!( "xsave" ) , information. xsave( ) ) ;
503+ assert_eq ! ( cfg_feature_enabled!( "xsaveopt" ) , information. xsaveopt( ) ) ;
504+ assert_eq ! (
505+ cfg_feature_enabled!( "xsavec" ) ,
506+ information. xsavec_and_xrstor( )
507+ ) ;
508+ assert_eq ! (
509+ cfg_feature_enabled!( "xsavec" ) ,
510+ information. xsaves_xrstors_and_ia32_xss( )
511+ ) ;
512+ }
513+
461514}
0 commit comments