// Copyright (c) 2019, 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.9

// Test numeric types.

import "package:expect/expect.dart";
import "package:wasm/wasm.dart";
import "dart:typed_data";

void main() {
  // int64_t addI64(int64_t x, int64_t y) { return x + y; }
  // int32_t addI32(int32_t x, int32_t y) { return x + y; }
  // double addF64(double x, double y) { return x + y; }
  // float addF32(float x, float y) { return x + y; }
  var data = Uint8List.fromList([
    0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x19, 0x04, 0x60,
    0x02, 0x7e, 0x7e, 0x01, 0x7e, 0x60, 0x02, 0x7f, 0x7f, 0x01, 0x7f, 0x60,
    0x02, 0x7c, 0x7c, 0x01, 0x7c, 0x60, 0x02, 0x7d, 0x7d, 0x01, 0x7d, 0x03,
    0x05, 0x04, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x01, 0x70, 0x01, 0x01,
    0x01, 0x05, 0x03, 0x01, 0x00, 0x02, 0x06, 0x08, 0x01, 0x7f, 0x01, 0x41,
    0x80, 0x88, 0x04, 0x0b, 0x07, 0x2e, 0x05, 0x06, 0x6d, 0x65, 0x6d, 0x6f,
    0x72, 0x79, 0x02, 0x00, 0x06, 0x61, 0x64, 0x64, 0x49, 0x36, 0x34, 0x00,
    0x00, 0x06, 0x61, 0x64, 0x64, 0x49, 0x33, 0x32, 0x00, 0x01, 0x06, 0x61,
    0x64, 0x64, 0x46, 0x36, 0x34, 0x00, 0x02, 0x06, 0x61, 0x64, 0x64, 0x46,
    0x33, 0x32, 0x00, 0x03, 0x0a, 0x21, 0x04, 0x07, 0x00, 0x20, 0x01, 0x20,
    0x00, 0x7c, 0x0b, 0x07, 0x00, 0x20, 0x01, 0x20, 0x00, 0x6a, 0x0b, 0x07,
    0x00, 0x20, 0x00, 0x20, 0x01, 0xa0, 0x0b, 0x07, 0x00, 0x20, 0x00, 0x20,
    0x01, 0x92, 0x0b,
  ]);

  var inst = WasmModule(data).instantiate().build();
  var addI64 = inst.lookupFunction("addI64");
  var addI32 = inst.lookupFunction("addI32");
  var addF64 = inst.lookupFunction("addF64");
  var addF32 = inst.lookupFunction("addF32");

  int i64 = addI64(0x123456789ABCDEF, 0xFEDCBA987654321);
  Expect.equals(0x1111111111111110, i64);

  int i32 = addI32(0xABCDEF, 0xFEDCBA);
  Expect.equals(0x1aaaaa9, i32);

  double f64 = addF64(1234.5678, 8765.4321);
  Expect.approxEquals(9999.9999, f64, 1e-6);

  double f32 = addF32(1234.5678, 8765.4321);
  Expect.approxEquals(9999.9999, f32, 1e-3);
}
